Python:循环遍历几个csv文件

时间:2013-04-29 18:15:26

标签: python file loops csv

我想知道是否有人知道如何在Python中更改脚本,以便它通过包含csv文件的文件夹并将它们分成三组。当我在命令行中键入文件名时脚本正在工作,但我有很多文件,所以这将永远需要。它现在看起来像这样:

resultsdir = "blah"

#filename1=sys.argv[1]
#filename2=sys.argv[2]
#filename3=sys.argv[3]

file1 = open(resultsdir+"/"+filename1+".csv")
file2 = open(resultsdir+"/"+filename2+".csv") 
file3 = open(resultsdir+"/"+filename3+".csv")

我是一个完全的初学者,我希望我已经能够解释我想要的东西。欢呼任何帮助!

2 个答案:

答案 0 :(得分:7)

您可以使用glob模块(http://docs.python.org/3.3/library/glob.html)获取目录中的所有.csv个文件,然后打开它们。

示例:

import glob
resultsdir = "blah"

files = sorted(glob.glob(resultsdir+'/*.csv'))
while len(files) >= 3:
     file1 = open(files.pop(0))
     file2 = open(files.pop(0))
     file3 = open(files.pop(0))
     # Do something
# if the number of files can't be divided by 3 do something
# with the 1 or 2 files which are left

修改:将files.pop()更改为files.pop(0)以获取从第一个文件到最后一个文件的文件,而不是从最后一个文件到第一个文件。

答案 1 :(得分:1)

如果你想要的只是按列表的元素分组,这里有一个代码的例子:

import itertools


def groupby_three(iterable):
    # x[0] is the index of the scanned element in the input list
    for _, values in itertools.groupby(enumerate(iterable),
                                       lambda x: x[0] / 3):
        yield([y[1] for y in values])

# Group by 3 the integers from 10 to 19
for x in groupby_three(xrange(10, 20)):
    print x

输出:

[10, 11, 12]
[13, 14, 15]
[16, 17, 18]
[19]