Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中打开所有特定类型的文件并对其进行处理?_Python - Fatal编程技术网

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

如何在Python中打开所有特定类型的文件并对其进行处理?,python,Python,我正试图弄明白如何让python遍历一个充满csv文件的目录,处理每个文件,并输出一个带有修剪过的值列表的文本文件 在这个例子中,我正在迭代一个包含许多不同类型列的CSV,但我真正想要的是名字、姓氏和关键字。我有一个文件夹,里面装满了这些csv,有不同的列(除了它们在csv中共享名字、姓氏和关键字)。打开该文件夹的最佳方式是什么,浏览每个csv文件,然后将其作为自己的csv文件或文本列表,如下面的示例所示 import csv reader = csv.reader(open("keywords

我正试图弄明白如何让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

我再次回答了我自己的问题。。。我将os和glob模块导入nab路径

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

Shell(Linux、Unix) 外壳:

python myapp.py folder/*.csv Windows(或没有外壳可用。) 注意:Python 2.5需要从uuu future uuu导入带有u语句的

一些建议:

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

  • 您可以使用list index()函数,而不是在标题上循环,例如: if rownum == 0: for header in ('Keyword', 'First Name', 'Last Name'): header_index[header] = row.index(header) 如果rownum==0: 对于(‘关键字’、‘名’、‘姓’)中的标题: 页眉索引[页眉]=行索引(页眉)

  • 您可以使用glob模块获取文件名,但gs可能是对的,shell globbing是一种更好的方法

  • 最好也使用csv模块来编写文件;我认为它可以处理逃逸,所以它可能会更健壮

问题的“获取所有CSV文件”部分已经被回答了好几次(包括OP),但“获取正确命名的列”还没有得到回答:这让它变得微不足道——“处理一个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')

我认为处理目录中大量文件的最佳方法是使用os.walk(在Python os模块文档中有文档记录)

下面是我对另一个Python问题的回答,其中包括使用经过测试的Python代码来使用os.walk打开一堆文件。这个版本也会访问所有子目录,但很容易将其修改为只保留在一个目录中

关于使用globs的注意事项——OS X返回按字母顺序排序的集合,Linux不按特定顺序返回。可能没关系,但很高兴知道。 if rownum == 0: for header in ('Keyword', 'First Name', 'Last Name'): header_index[header] = row.index(header)
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')