有人知道Python在循环时如何排列文件吗? 我需要以固定顺序循环遍历文件夹中的某些文件(最好根据文件名以字母数字的形式),但Python似乎以相当随机的顺序循环遍历它们。 到目前为止,我正在使用此代码:
filelist = glob.glob(os.path.join(path, 'FV/*.txt'))
for infile in filelist:
#do some fancy stuff
print str(infile)
并且文件名按照对我来说不太明显的顺序打印。
有没有简单的方法来预定义该循环的某个顺序? 谢谢!
答案 0 :(得分:18)
据我在文档中看到,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
作为关键字参数,这是一个提供排序顺序的函数。有关更多信息,请参阅文档(之前已链接)。
答案 1 :(得分:0)
如果要仅按字母顺序(而不是字母数字)遍历文件,则可以通过以下方式调用sort使其不区分大小写:
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)
否则,只需对文件列表使用排序功能即可。
答案 2 :(得分:-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()
..它需要参数可能有用,我认为downvotes是不公平,但嘿,每个人都有权发表意见 - .-)