【问题标题】:Unable to print directory list in a column with python无法使用python在列中打印目录列表
【发布时间】:2019-02-20 17:18:31
【问题描述】:

我正在工作的脚本将在列中使用 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

【问题讨论】:

  • 请发布您当前获得的输出示例,以及您期望的输出示例。
  • 您的代码根本不起作用,因为os.scandir 方法返回os.DirEntry 对象而不是文件名。也不需要嵌套的for 循环。
  • @blhsing 嵌套的
    for
    循环是在列中打印出结果。

标签: python python-3.x


【解决方案1】:

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)

【讨论】:

  • 成功了。我从未见过之前在打印语句中使用过的 .name。
猜你喜欢
  • 2021-01-04
  • 2014-07-09
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
相关资源
最近更新 更多