Python:通过几个csv文件循环
我想知道是否有人知道我可以如何在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")
我是一个完整的初学者,我希望我已经能够解释我想要的。欢呼任何帮助!
您可以使用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)
拿到文件从第一个到最后,而不是从上次的第一个文件。
我已经确定该目录只包含csv文件,我只需确保它将前三个文件放在一起等等。这可能非常简单...谢谢你的帮助! – 2013-04-29 18:30:10
文件是否被排序?或者订单不重要? – TobiMarg 2013-04-29 18:33:40
他们被排序,前三个一起去,等等。 – 2013-04-29 18:34:43
如果你想要的是一群由名单的三个要素,这里是做它的代码示例:
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]
基本上看起来像一个可行的想法,但没有解决通过包含csv文件的文件夹并以三个组为单位的问题。 – martineau 2013-04-29 20:43:38
你能对您的问题阐述?我看到3个文件被打开,就这些。如果你想循环访问csv文件并打开它们,为什么不一个一个的去做呢?为什么每次三个? – tyteen4a03 2013-04-29 18:17:19
我有一个包含所有csv文件的文件夹,而不是仅仅采用3个文件夹,我想在所有这些文件上使用脚本。我不是指通过csv文件自己循环,我想使用三个组,但不仅一次。 – 2013-04-29 18:21:00
该文件夹是否仅包含csv文件?你是否会随意选择这3个文件? – Aditya 2013-04-29 18:21:33