如何从目录中读取数百个csv文件并将每个文件中的特定列相加?

时间:2014-02-18 09:49:57

标签: python csv

我在目录中有大约650个csv文件。它们每个都有三个带标题的列(#ch ### kev ## ### count ###)和2050行。其中一个文件图像部分显示在此处。

    ch       kev     count
     0        0        0
     1        0        0
     2        0        0
     .        .        .
     .        .        .  
     .        .        .
    100       0        30
    101       0        70
     .        .        .
     .        .        .
    200       .        1000
    201       0        1037
     .        .        .
     .        .        .
    2050      0        0        

我想对列(#ch#)的特定范围(100 -200)列的列(### count ###)求和。我只能为下面显示的单个csv文件编写程序:

    import csv

    cr = csv.reader(open("D:\\Pythontest\\test1.csv", 'r'))
    cr.next()
    ['ch', 'kev', 'count']

    total = 0

    for row in cr:
        if 100 <= int(row[0]) <= 200:
           total += int(row[2])

    print total

但我不知道如何一次为所有文件编写程序。我想从每个文件中提取sum值并将它们放在一个单独的文件中。我使用的是Python 2.7。

3 个答案:

答案 0 :(得分:1)

由于您有一个文件的工作程序,所有您需要的是在每个文件上使用该程序的方法。我建议做以下事情:

祝你好运,如果遇到其中一个步骤的问题,请随意发布一个更具体的新问题。

答案 1 :(得分:0)

您需要从目录中获取文件列表,然后执行for循环。

这是一个功能:

def find_csv_files( path_to_dir, suffix=".csv" ):
filenames = listdir(path_to_dir)
return [ filename for filename in filenames if filename.endswith( suffix ) ]

然后只需使用它并执行for循环:

filenames = find_csv_files("dir/directory")
for name in filenames:
  print name

答案 2 :(得分:0)

试试这个:

import os
import csv

def get_all_files(directory, extension='.csv'):
    dir_list = os.listdir(directory)
    csv_files = []
    for e in dir_list:
        if e.endswith(extension):
            csv_files.append(os.path.realpath(e))
    return csv_files

def sum_from_csv(csv_file):
    cr = csv.reader(open(csv_file, 'r'))
    cr.next()
    ['ch', 'kev', 'count']

    total = 0

    for row in cr:
        if 100 <= int(row[0]) <= 200:
           total += int(row[2])

    print total

csv_files = get_all_files('D:\\Pythontest\\')

for each in csv_files:
    sum_from_csv(each)