os.walk以什么顺序进行迭代?
我担心给出的文件和目录的顺序os.walk()
。如果我有这些目录,1
,10
,11
,12
,2
,20
,21
,22
,3
,30
,31
,32
,什么是输出列表的顺序?
它是按数值排序的吗?
1 2 3 10 20 30 11 21 31 12 22 32
或按ASCII值排序,如ls
?
1 10 11 12 2 20 21 22 3 30 31 32
此外,如何获得特定的排序?
回答:
os.walk
用途os.listdir
。这是的文档字符串os.listdir
:
listdir(路径)-> list_of_strings
返回一个列表,其中包含目录中条目的名称。
path: path of directory to list
。它不包括特殊条目“。” 和“ ..”,即使它们存在于目录中。
(我的重点)。
但是,您可以sort
用来确保所需的顺序。
for root, dirs, files in os.walk(path): for dirname in sorted(dirs):
print(dirname)
(请注意,目录名是字符串而不是整数,因此将sorted(dirs)
它们作为字符串排序-一次只需要这样做。
正如Alfe和Ciro Santilli指出的那样,如果您希望按排序顺序 递归 目录,则dirs
就地 修改:
for root, dirs, files in os.walk(path): dirs.sort()
for dirname in dirs:
print(os.path.join(root, dirname))
您可以自己对此进行测试:
import osos.chdir('/tmp/tmp')
for dirname in '1 10 11 12 2 20 21 22 3 30 31 32'.split():
try:
os.makedirs(dirname)
except OSError: pass
for root, dirs, files in os.walk('.'):
for dirname in sorted(dirs):
print(dirname)
版画
110
11
12
2
20
21
22
3
30
31
32
如果要按数字顺序列出它们,请使用:
for dirname in sorted(dirs, key=int):
要对字母数字字符串进行排序,请使用自然排序。
以上是 os.walk以什么顺序进行迭代? 的全部内容, 来源链接: utcz.com/qa/425366.html