如何在Python中打开特定类型的所有文件并对其进行处理?

2024-09-30 10:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出如何让python遍历一个充满csv文件的目录,处理每个文件,并用一个修剪过的值列表输出一个文本文件。

在这个例子中,我迭代了一个CSV,它有很多不同类型的列,但我真正想要的是名字、姓氏和关键字。我有一个文件夹,里面有很多不同列的csv(除了它们在csv中共享名字、姓氏和关键字)。打开那个文件夹,浏览每个csv文件,然后像我在下面的例子中看到的那样,把它全部吐出来作为它自己的csv文件作为一个文本列表。

import csv
reader = csv.reader(open("keywords.csv"))
rownum = 0
headnum = 0
F = open('compiled.txt','w')
for row in reader:
    if rownum == 0:
        header = row;
        for col in row:
            if header[headnum]=='Keyword':
                keywordnum=headnum;
            elif header[headnum]=='First Name':
                firstnamenum=headnum;
            elif header[headnum]=='Last Name':
                lastnamenum=headnum;
            headnum +=1
    else:
        currentrow=row
        print(currentrow[keywordnum] + '\n' + currentrow[firstnamenum] + '\n' + currentrow[lastnamenum]) 
        F.write(currentrow[keywordnum] + '\n')

    rownum +=1

Tags: 文件csv文件夹列表关键字名字reader例子
3条回答

最好的方法可能是使用shell的globbing功能,或者使用Python的glob模块。

Shell(Linux、Unix)

外壳:

python myapp.py folder/*.csv

我的app.py:

import sys
for filename in sys.argv[1:]:
    with open(filename) as f:
        # do something with f

窗口(或没有可用的shell。)

import glob
for filename in glob.glob("folder/*.csv"):
    with open(filename) as f:
        # do something with f

注意:Python 2.5需要from __future__ import with_statement

问题的“获取所有CSV文件”部分已经回答了好几次(包括OP),但是名为“获取正确的列”的“获取正确的列”还没有:csv.DictReader使它变得很简单--“处理一个CSV文件”循环变成:

reader = csv.DictReader(open(thecsvfilename))
for row in reader:
    print('\n'.join(row['Keyword'], row['First Name'], row['Last Name'])) 
    F.write(row['Keyword'] + '\n')

一些建议:

  • 您可以将关键字、名字和姓氏的头索引保留在映射中,而不是使用单独的变量。这将使以后修改脚本更加容易。

  • 可以使用list index()函数,而不是在头上循环,例如:

    if rownum == 0:
        for header in ('Keyword', 'First Name', 'Last Name'):
            header_index[header] = row.index(header)
    
  • 您可以使用glob模块获取文件名,但是gs可能是正确的,shell globbing是一种更好的方法。

  • 最好也使用csv模块来编写文件;我认为它可以处理转义,因此可能更健壮。

相关问题 更多 >

    热门问题