【问题标题】:Python: loop through several csv filesPython:遍历几个 csv 文件
【发布时间】:2013-04-23 12:34:18
【问题描述】:

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

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

【问题讨论】:

  • 你能详细说明你的问题吗?我看到 3 个文件被打开,仅此而已。如果要循环遍历csv文件并打开它们,为什么不一一做呢?为什么一次三个?
  • 我有一个包含所有 csv 文件的文件夹,而不是只取 3 个我想在所有文件上使用脚本。我不是指循环遍历 csv 文件本身,我想使用三个一组,但不仅仅是一次。
  • 文件夹是否只包含 csv 文件?而这3个文件你是不是随便选的?
  • 是的,它只包含 csv 文件。如果可能的话,我想先选择前三个,然后再选择后三个,依此类推。干杯!
  • 如何区分前三个和后三个?它们的命名是否使得对文件名列表进行排序将使它们按正确的顺序排列? [我的意思是文件名可能以任意顺序返回,因此我们需要一种方法将它们分组以获得您想要的顺序。]

标签: python file loops csv


【解决方案1】:

您可以使用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 文件,我真的只需要确保它将前三个文件放在一起,依此类推。这可能很简单......不过还是谢谢你的帮助!
  • 它们是排序的,前三个一起去等等。
  • 使用 glob 似乎是最简单的解决方案。我现在添加了sorted(),以便对文件列表进行排序。使用 glob 时,如果目录中有一些非 csv 文件也没有区别。对于其他方式,您可以查看 os.listdiros.walk,但它们看起来更复杂。
【解决方案2】:

如果您只想按三个元素对列表的元素进行分组,以下是执行此操作的代码示例:

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 文件的文件夹并将它们分成三个一组的问题。
猜你喜欢
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多