2013-04-29 121 views
2

我想知道是否有人知道我可以如何在Python中更改脚本,以便它通过包含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") 

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

+1

你能对您的问题阐述?我看到3个文件被打开,就这些。如果你想循环访问csv文件并打开它们,为什么不一个一个的去做呢?为什么每次三个? – tyteen4a03 2013-04-29 18:17:19

+0

我有一个包含所有csv文件的文件夹,而不是仅仅采用3个文件夹,我想在所有这些文件上使用脚本。我不是指通过csv文件自己循环,我想使用三个组,但不仅一次。 – 2013-04-29 18:21:00

+0

该文件夹是否仅包含csv文件?你是否会随意选择这3个文件? – Aditya 2013-04-29 18:21:33

回答

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)拿到文件从第一个到最后,而不是从上次的第一个文件。

+0

我已经确定该目录只包含csv文件,我只需确保它将前三个文件放在一起等等。这可能非常简单...谢谢你的帮助! – 2013-04-29 18:30:10

+0

文件是否被排序?或者订单不重要? – TobiMarg 2013-04-29 18:33:40

+0

他们被排序,前三个一起去,等等。 – 2013-04-29 18:34:43

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] 
+0

基本上看起来像一个可行的想法,但没有解决通过包含csv文件的文件夹并以三个组为单位的问题。 – martineau 2013-04-29 20:43:38