Python-文件循环-顺序
有人知道Python在循环文件时是如何排列文件的吗? 我需要以固定的顺序(最好是根据文件名的字母数字)循环遍历文件夹中的一些文件,但是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) 文件名的打印顺序对我来说并不明显 有没有
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)