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

How does Python 3 enumerate choose the order of its items?

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

文件夹的片段如下:

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() 使用什么逻辑来选择项目的顺序。我不知道 how/why 它选择 'BC56_0608PPO.csv' 作为元素 0?它似乎真的没有韵律或理由,但它是有问题的。我需要第一个文件是 'BCx_mm16PPO.csv' 或 'BCx_mm17PPO.csv'.

中的任何一个

我对其他有此问题的人的搜索都没有结果。我可能没看正确。感谢您的协助。

Enumerate 不会改变可迭代对象的顺序,它只是给每个项目一个索引。 glob.glob的顺序依赖于os.listdir,其顺序为arbitrary.

您可以使用 sorted:

按字母顺序排序
sorted(glob.glob(path + "/*.csv"))

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

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