2015-09-28 17 views
0

我正在尝试读取目录中的所有文件。使用python从文件夹读取文件

for root, dirs,files in os.walk(path): 
     for j in files: 
      print(str(j)) 

这是我的代码,其中path是目录的路径被read.But它不会打印在其名称的顺序文件。在我的情况下,我有从0.txt,1.txt,...到3590.txt的文件。我希望它以相同的顺序打印文件。而是从579.txt开始。我怎样才能解决这个问题?我想按照相同的顺序对这些文件进行一些计算,因此只需将这些名称存储在一个列表中并对其进行排序就不会有帮助。

+3

_“我想要做的文件的一些计算在相同所以只需将名称存储在列表中并对其进行排序即可。“_您可以使用列表并仍然对其内容执行计算。你能进一步解释为什么这不起作用吗? – Kevin

+0

与[Python中的os.listdir()的非字母数字列表顺序相关](http://stackoverflow.com/questions/4813061/nonalphanumeric-list-order-from-os-listdir-in-python) – Rodrigue

回答

4

怎么样用一个lambda排序他们使用int类型的文件名:

for root, dirs,files in os.walk(path): 
    for j in sorted(files, key=lambda key: int(key.replace(".txt", ""))): 
     print(str(j)) 
+1

这不会尽管如此,它们按数字排序。例如,'sorted([“2.txt”,“11.txt”,“300.txt”])给出了'['11 .txt','2.txt','300.txt']''。 (这实际上可能是OP的意思是“排序不会有帮助”) – Kevin

+0

不,它不像凯文说的那样工作。我得到这样的东西 - 539.txt 54.txt 540.txt 541.txt – Noober

+0

啊,这可能的确如此... – RickyA

0

由于文件名结构就像$Number$.txt,所以我们可以按Number排序。

演示

>>> l = ["0.txt", "1.txt", "33.txt", "2.txt", "10.txt", "11.txt"] 
>>> sorted([(int(i.replace(".txt", "")), i) for i in l ]) 
[(0, '0.txt'), (1, '1.txt'), (2, '2.txt'), (10, '10.txt'), (11, '11.txt'), (33, '33.txt')] 
>>> [i[1] for i in sorted([(int(i.replace(".txt", "")), i) for i in l ])] 
['0.txt', '1.txt', '2.txt', '10.txt', '11.txt', '33.txt'] 
相关问题