Loop through multiple csv files, copying only certain columns to new files
我在一个文件夹中有许多.csv文件(1.csv、2.csv、3.csv等),我需要循环它们。对于每个现有文件,输出应该是一个对应的新文件,但每个文件只应包含2列。
以下是csv文件的示例:
1 2 3 4 | 004,444.444.444.444,448,11:16 PDT,11-24-15 004,444.444.444.444,107,09:55 PDT,11-25-15 004,444.444.444.444,235,09:45 PDT,11-26-15 004,444.444.444.444,241,11:00 PDT,11-27-15 |
下面是我希望输出的外观:
1 2 3 4 | 448,11-24-15 107,11-25-15 235,11-26-15 241,11-27-15 |
下面是我使用python实现这一点的工作尝试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import csv import os import glob path = '/csvs/' for infile in glob.glob( os.path.join(path, '*csv') ): inputfile = open(infile, 'r') output = os.rename(inputfile +".out", 'w') #Extracts the important columns from the .csv into a new file with open(infile, 'r') as source: readr = csv.reader(source) with open(output,"w") as result: writr = csv.writer(result) for r in readr: writr.writerow((r[4], r[2])) |
仅使用这段代码的后半部分,我就能够通过在代码中指定输入文件来获得所需的输出。然而,这个python脚本将是一个更大的bash脚本的一小部分,它将(希望)完全自动化。
如何调整此脚本的输入以循环访问每个文件并创建一个只包含两个指定列的新文件?
如果有什么需要我澄清的,请告诉我。
1 | os.rename(inputfile +".out", 'w') |
这不起作用,您试图使用
另一个问题
你可以这么做-
1 2 3 4 5 6 7 8 9 | path = 'csvs/' for infile in glob.glob( os.path.join(path, '*csv') ): output = infile + '.out' with open(infile, 'r') as source: readr = csv.reader(source) with open(output,"w") as result: writr = csv.writer(result) for r in readr: writr.writerow((r[4], r[2])) |
你可以使用熊猫图书馆。它提供了一些处理csv文件的功能。read_csv将为您读取csv文件,并为您提供一个数据帧对象。访问此链接以获取有关如何从熊猫数据帧写入csv文件的示例。此外,网上还有很多教程。