Python 3枚举如何选择其项目的顺序?

时间:2018-02-24 12:18:05

标签: python python-3.x enumerate

我有一个包含1,199个CSV文件的文件夹。这些文件的形式都是“BCx_mmyyPPO.csv'其中x.isin([6, 51, 55, 56, 57, 60, 200, 240, 269, 316, 340, 415])mmyy是2位数月份,后跟2位数年份。

该文件夹的片段如下:

folder sample

我已经编写了以下Python 3代码,将所有1,199个文件整理成一个大型CSV文件:

import glob
import os
import shutil

path = r'path/to/files'
allFiles = glob.glob(path + '/*.csv')
with open('PPO.csv', 'wb') as outfile:
    for i, fname in enumerate(allFiles):
        with open(fname, 'rb') as infile:
            if i != 0:
                infile.readline()
            shutil.copyfileobj(infile, outfile)

打印步骤在功能上是不必要的,但却是我想要弄清楚的东西。 enumerate()用什么逻辑来选择项目的顺序。我无法弄清楚它是如何/为什么选择BC56_0608PPO.csv'作为元素0?似乎没有任何押韵或理由,但它有问题。我需要第一个文件是' BCx_mm16PPO.csv'或者' BCx_mm17PPO.csv'。

我对其他任何有这个问题的搜索都很短暂。我可能看起来不正确。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

枚举不会改变迭代的顺序,它只是给每个项目一个索引。 os.listdir的顺序取决于sorted,其顺序为arbitrary

您可以使用sorted(glob.glob(path + "/*.csv")) 按字母顺序对其进行排序:

sorted(glob.glob(path + "/*.csv"), key=os.path.getmtime)
sorted(glob.glob(path + "/*.csv"), key=os.path.getsize)

...或使用os.path按大小或上次修改时间排序:

devServer: {
  inline:true,
  port: 8081
},