Python 如何从一个目录中读取数百个csv文件,并对每个文件中的特定列求和?

Python 如何从一个目录中读取数百个csv文件,并对每个文件中的特定列求和?,python,csv,Python,Csv,我在一个目录中有大约650个csv文件。其中每一个都有三列标题(#ch###kev####计数#)和2050行。其中一个文件图像部分显示在这里 ch kev count 0 0 0 1 0 0 2 0 0 . . . . . . . . .

我在一个目录中有大约650个csv文件。其中每一个都有三列标题(#ch###kev####计数#)和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)的列(#计数###)的总和。我只能为单个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
导入csv
cr=csv.reader(打开(“D:\\Pythontest\\test1.csv,'r'))
cr.next()
['ch','kev','count']
总数=0
对于cr中的行:

如果100,因为您有一个用于一个文件的工作程序,那么您只需要在每个文件上使用该程序。我建议采取以下措施:

  • 了解如何使用glob模块列出所有csv文件
  • 将代码移动到函数中,将文件名作为参数并返回该文件的总数
  • 循环glob提供给您的每个文件并运行该函数,在运行时将总数相加

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

您需要从目录中获取文件列表,然后执行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

试试这个:

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)
导入操作系统
导入csv
def get_all_文件(目录,扩展名='.csv'):
dir\u list=os.listdir(目录)
csv_文件=[]
对于目录列表中的e:
如果e.endswith(扩展名):
csv_files.append(os.path.realpath(e))
返回csv\u文件
来自csv的定义和(csv文件):
cr=csv.reader(打开(csv_文件'r'))
cr.next()
['ch','kev','count']
总数=0
对于cr中的行:

如果100,你考虑使用数据库吗?此外,如果您需要所有文件的总计,则一个简单的批处理命令可以将所有文件合并为一个文件(例如
cat*.csv>all.csv
),然后您可以使用原始程序处理该文件。您好,我已尝试编写脚本,但显示了一些错误,如:文件“”,第1行,in;文件“”,第2行,在“获取所有文件”中;NameError:未定义全局名称“listdir”。我怎样才能解决这个问题,我会很高兴得到你的答案。谢谢你的回复。现在显示了另一个错误:文件“”,第2行,在中;文件“”第2行,从csv的总和;IOError:[Error 2]没有这样的文件或目录:“C:\\Python27\\test1.csv”……实际上我的目录是“D:\\Pythontest\\”,里面所有的文件都由test1、test2命名……我期待着您的回复。谢谢显示文件列表,打印csv\U文件,并在此处显示输出!现在我可以运行程序了。我只是删除了部分“(os.path.realpath)”,并且我已经在另一个.txt文件中写入了结果,其中我在600个csv文件的一列中有求和结果。现在,我希望每20列横向写入一行的求和结果。i、 e.第(1-20)列的汇总结果将放在第1列,第(21-41)列的汇总结果将放在第2行,…..提前感谢您能告诉我怎么做,我期待您的回复。非常感谢。