相当于 python 3 中的 find coreutil 命令用于递归返回目录结构中的所有文件和文件夹?

2024-02-03

在 python (3) 中递归返回目录结构中的所有文件和文件夹的最佳替代方案是什么?

我想要类似的东西:

find ~/x/y/ > ~/matches.txt

我重写了一个提示另一个问题 https://stackoverflow.com/a/27457665/908494并得到了一些有用的东西,但它有一些问题:

matches = glob.glob("/Users/x/y/*/*)

如果“~/x/y/”中存在任何文件,这将不起作用,这可能会发生,我也不确定这是一种可靠的或惯用的方法来执行此操作。

那么在 Python 中复制上述 find 命令的最佳方法是什么?


您可以使用os.walk https://docs.python.org/3/library/os.html#os.walk:

获取目录、文件名列表:

import os

matches = []
for dirpath, dirnames, filenames in os.walk(os.path.expanduser('~/x/y')):
    matches.extend(os.path.join(dirpath, x) for x in dirnames + filenames)

要将文件列表写入文本文件:

import os

with open(os.path.expanduser('~/matches.txt'), 'w') as f:
    for dirpath, dirnames, filenames in os.walk(os.path.expanduser('~/x/y')):
        for x in dirnames + filenames:
            f.write('{}\n'.format(os.path.join(dirpath, x)))

os.path.expanduser https://docs.python.org/3/library/os.path.html#os.path.expanduser用于替换~与主目录路径。


替代使用pathlib.Path.rglob https://docs.python.org/3/library/pathlib.html#pathlib.Path.rglob自 Python 3.4 起可用:

import os
import pathlib

matches = list(map(str, pathlib.Path(os.path.expanduser('~/x/y')).rglob('*')))

import os
import pathlib

with open(os.path.expanduser('~/matches.txt'), 'w') as f:
    for path in pathlib.Path(os.path.expanduser('~/x/y')).rglob('*'):
        f.write('{}\n'.format(path))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相当于 python 3 中的 find coreutil 命令用于递归返回目录结构中的所有文件和文件夹? 的相关文章

随机推荐