Var*_*r87 4 python unix python-3.x
在python(3)中找到以递归方式返回目录结构中的所有文件和文件夹的最佳替代方法是什么?
我想要类似的东西:
find ~/x/y/ > ~/matches.txt
Run Code Online (Sandbox Code Playgroud)
我重写了另一个问题的提示并得到了一些有用的东西,但它有一些问题:
matches = glob.glob("/Users/x/y/*/*)
Run Code Online (Sandbox Code Playgroud)
如果在"〜/ X/Y /",这可能发生,我也不能肯定它是做这个强大的或习惯的方法的任何文件,这将无法正常工作.
那么在Python中复制上述find命令的最佳方法是什么?
你可以使用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)
Run Code Online (Sandbox Code Playgroud)
要将文件列表写入文本文件:
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)))
Run Code Online (Sandbox Code Playgroud)
os.path.expanduser用于替换~主目录路径.
pathlib.Path.rglob自Python 3.4以来可用的备选方案:
import os
import pathlib
matches = list(map(str, pathlib.Path(os.path.expanduser('~/x/y')).rglob('*')))
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)