Python-文件循环-顺序

Python-文件循环-顺序,python,Python,有人知道Python在循环文件时是如何排列文件的吗? 我需要以固定的顺序(最好是根据文件名的字母数字)循环遍历文件夹中的一些文件,但是Python似乎以一种相当随机的顺序遍历它们。 到目前为止,我正在使用以下代码: filelist = glob.glob(os.path.join(path, 'FV/*.txt')) for infile in filelist: #do some fancy stuff print str(infile) 文件名的打印顺序对我来说并不明显 有没有

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

filelist = glob.glob(os.path.join(path, 'FV/*.txt'))
for infile in filelist: 
  #do some fancy stuff
  print str(infile)
文件名的打印顺序对我来说并不明显

有没有简单的方法来预先定义循环的特定顺序? 谢谢

这是另一种选择。。
(考虑到
glob.glob(),没有定义的顺序。鉴于此,最简单的方法是对返回给您的列表进行排序:

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

这将只是作为字符串排序-这将提供您所寻找的简单的固定顺序。如果需要特定的顺序,则将
key
作为关键字参数,这是一个提供排序顺序的函数。有关详细信息,请参阅文档(先前链接)。

如果您希望仅按字母顺序(而不是字母数字顺序)遍历文件,则需要通过以下方式调用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函数。

-1,这是不等效的
walk()
提供所有文件,并进入子目录。如果不想进入子目录,请中断
walk()
为您提供控制,它不会做您不希望它做的事情。当您不希望递归到子目录时,使用
walk
是相当愚蠢的。而且也不能保证
walk
会按照您所声称的字母顺序提供文件。同样,
walk()
会根据对象的类型和(再次)您所描述的操作,为您提供编程方式解析对象
glob.glob()
只会在你脸上吐出你给它的文件夹的所有内容的列表。例如,
glob.glob('C:\Documents and Settings\myuser\Desktop\*')
将为您提供未排序、未定义的内容列表。。至少在我看来,解析“ls/path/”并不是最好的做法,因为实际上可以按类型抓取项目。您的代码甚至不正确,因为
walk
使用目录名而不是通配符。请告诉我。字母数字是字符串的默认排序,对吗+1@BlackVegetable是的,这只是一个简单的排序-显然,你可以定义一个
函数来按你想要的方式排序。也许你可以编辑你的答案来包含这些信息以及一个关于
反向
的注释?@BlackPlanet我添加了一个简短的注释,关于
排序()
如果OP需要它,请从这里开始。为了完整起见:如果您只想遍历文件,os.listdir通常就足够了(…在您的情况下不是,因为您想扩展*.txt)。
    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)