2

我想知道是否有人知道我可以如何更改 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")

我是一个完整的初学者,我希望我能够解释我想要什么。为任何帮助干杯!

4

2 回答 2

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

于 2013-04-29T18:22:43.780 回答
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]
于 2013-04-29T20:28:49.530 回答