我想知道是否有人知道如何在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")
我是一个完全的初学者,我希望我已经能够解释我想要的东西。欢呼任何帮助!
答案 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]