16

有谁知道 Python 在循环文件时如何排列文件?我需要以固定顺序循环遍历文件夹中的某些文件(最好根据文件名按字母数字顺序),但 Python 似乎以相当随机的顺序循环遍历它们。到目前为止,我正在使用此代码:

filelist = glob.glob(os.path.join(path, 'FV/*.txt'))
for infile in filelist: 
  #do some fancy stuff
  print str(infile)

并且文件名的打印顺序对我来说并不明显。

有没有什么简单的方法可以为该循环预定义某个顺序?谢谢!

4

3 回答 3

34

据我在文档中看到的,glob.glob()没有定义的顺序。鉴于此,最简单的确定方法是对返回给您的列表进行排序:

filelist = glob.glob(os.path.join(path, 'FV/*.txt'))
for infile in sorted(filelist): 
  #do some fancy stuff
  print str(infile)

这将只是作为字符串排序 - 这给出了您正在寻找的简单固定顺序。如果您需要特定的顺序,则将sorted()key作为关键字参数,这是一个给出排序顺序的函数。有关更多信息,请参阅文档(先前链接)。

于 2013-04-22T13:58:04.207 回答
0

如果您想仅按字母顺序(而不是字母数字顺序)遍历文件,您将希望通过按以下方式调用 sorted 使其不区分大小写:

    filelist = glob.glob(os.path.join(path, 'FV/*.txt'))
    for infile in sorted(filelist, key=lambda s: s.lower()): 
      #do some fancy stuff
      print str(infile)

否则,只需使用 filelist 上的 sorted 函数。

于 2019-07-01T16:55:24.830 回答
-3
import os
for root, dirs, files in os.walk(os.path.join(path, 'FV/'), topdown=True):
  print root
  print files.sort(reverse=True)

这是一个替代方案..(考虑到glob.glob()订购项目不带参数,我只是提出了一个替代方案glob.glob()walk()..它需要可能有用的参数,我认为反对票是不公平的,但嘿,每个人都有权发表他们的意见-。 -)

于 2013-04-22T13:56:13.783 回答