【问题标题】:Getting the absolute paths of all files in a folder, without traversing the subfolders获取文件夹中所有文件的绝对路径,无需遍历子文件夹
【发布时间】:2019-05-20 14:15:36
【问题描述】:

my_dir = "/raid/user/my_dir"

成为我文件系统上的一个文件夹,它不是当前文件夹(即,它不是os.getcwd() 的结果)。我想检索my_dir 中第一级层次结构的所有文件的绝对路径(即my_dir 中的所有文件的绝对路径,但不在my_dir 的子文件夹中)作为列表字符串absolute_paths。我需要它,以便以后删除带有os.remove() 的那些文件。

这与

几乎相同的用例

Get absolute paths of all files in a directory

但不同之处在于我不想遍历文件夹层次结构:我只需要层次结构第一级的文件(深度为 0?不确定这里的术语)。

【问题讨论】:

标签: python absolute-path


【解决方案1】:

调整该解决方案很容易:只调用一次os.walk(),不要让它继续:

root, dirs, files = next(os.walk(my_dir, topdown=True))
files = [ os.path.join(root, f) for f in files ]
print(files)

【讨论】:

  • 这行得通,谢谢。不确定 为什么 它有效,但这是我的问题。我会看看文档。
  • 要查看发生了什么,请将list(os.walk(my_dir, topdown=True)) 转储到您的标准输出。 (我建议使用小型目录树:-))
【解决方案2】:

您可以使用os.path 模块和列表推导。

import os

absolute_paths= [os.path.abspath(f) for f in os.listdir(my_dir) if os.path.isfile(f)]

【讨论】:

  • 不!它不起作用除非您从my_dir 运行脚本。 os.path.abspath 并没有真正找到绝对路径 - 它只是将执行脚本的文件夹的路径(os.getcwd() 的结果)添加到文件名。见stackoverflow.com/questions/24705679/…
【解决方案3】:

您可以使用 os.scandir 返回一个 os.DirEntry 对象,该对象具有多种选项,包括区分文件和目录的能力。

with os.scandir(somePath) as it:
    paths = [entry.path for entry in it if entry.is_file()]
print(paths)

如果您还想列出目录,当然,如果您想在列表中看到它们,您可以从列表推导中删除条件。

文档在listDir下也有这个注释:

另请参见 scandir() 函数返回目录条目以及文件属性信息,为许多常见用例提供更好的性能。

【讨论】:

  • 我的问题很清楚,我不想列出目录,因为我说“我想检索所有文件的绝对路径”。
  • @DeltaIV,我只是想彻底。上面的代码正是这样做的。
  • 好的,谢谢。看起来你的代码也有效,所以我赞成它。
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 2021-11-26
相关资源
最近更新 更多