循环遍历多个csv文件,仅将某些列复制到新文件

时间:2015-07-30 04:08:37

标签: python bash csv

我在一个文件夹(1.csv,2.csv,3.csv等)中有许多.csv文件,我需要遍历它们。输出应该是每个现有文件的相应NEW文件,但每个文件只应包含2列。

以下是csv文件的示例:

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

以下是我希望输出显示的方式:

448,11-24-15
107,11-25-15
235,11-26-15
241,11-27-15

以下是我用Python实现这一目标的尝试:

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脚本的一小部分,它将(希望)完全自动化。

如何调整此脚本的输入以循环显示每个文件并创建一个仅包含2个指定列的新文件?

如果有任何我需要澄清的内容,请告诉我。

2 个答案:

答案 0 :(得分:0)

您可以使用pandas库。它提供了几种处理csv文件的功能。 read_csv将为您读取csv文件并为您提供数据框对象。 Visit this link to get example about how to write csv file from pandas dataframe.更多网上有很多教程。

答案 1 :(得分:0)

inputfile文件是您打开的文件,但是您正在执行 -

os.rename(inputfile + ".out", 'w')

这不起作用,您尝试使用+运算符添加字符串和打开的文件。我甚至不确定你为什么需要那条线甚至线 - inputfile = open(infile, 'r')。您正在with语句中再次打开该文件。

另一个问题 -

  1. 您将路径指定为 - path = '/csvs/',根目录下的'csvs'目录极不可能。您可能想要使用其他相关目录,因此您应该使用相对目录。
  2. 你可以这样做 -

    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]))