首页 > 解决方案 > 无法使用python在列中打印目录列表

问题描述

我正在工作的脚本将在列中使用 scandir 打印目录。我能够成功地扫描目录并查看文件,但都在一行中。我试图达到的最终结果是通过添加两个加法循环在列中打印。
任何能引导我朝着正确方向前进的帮助都将不胜感激。

import os
import re

path = "//xdrive/workdir/"
dirs = os.scandir(path)


dlis=[]
for file in dirs:
    dlis.append(file)
    for row in dlis:
        for item in row:
            print(item)
        print("")

如果我不添加 for 循环并添加以下打印语句,这就是我得到的。

    打印(dlis)
`[<DirEntry 'web_2019-02-06.tar.gz'>, <DirEntry 'web_2019-02-07.tar.gz'>,       <DirEntry 'web_2019-02-09.tar.gz'>,<DirEntry 'web_2019-02-10.tar.gz'>, <DirEntry 'web_2019-02-10.tar.gz'>] 

` 这是我努力得到的最终结果。

web_2019-02-06.tar.gz
web_2019-02-07.tar.gz
web_2019-02-09.tar.gz
web_2019-02-10.tar.gz
web_2019-02-10.tar.gz

这是我得到的错误。

File "Backup_list.py", line 13, in <module>
    for item in row:
TypeError: 'nt.DirEntry' object is not iterable

标签: pythonpython-3.x

解决方案


os.scandir方法返回os.DirEntry对象而不是文件名。您应该使用name对象的属性,或者使用该os.listdir方法,因为您不需要文件的其他属性。此外,不需要嵌套for循环,因为您可以简单地遍历文件名并将每个文件名打印在单独的行上:

for file in os.scandir(path):
    print(file.name)

或者:

for filename in os.listdir(path):
    print(filename)

推荐阅读