13

Pythonでフォルダ内のファイルの完全な再帰リストを取得する最も簡単な方法は何ですか? については知ってos.walk()いますが、すべてのファイルのフィルタリングされていないリストを取得するだけではやり過ぎのようです。それは本当に唯一のオプションですか?

4

6 に答える 6

17

独自の関数を作成することを妨げるものは何もありません:

import os

def listfiles(folder):
    for root, folders, files in os.walk(folder):
        for filename in folders + files:
            yield os.path.join(root, filename)

次のように使用できます。

for filename in listfiles('/etc/'):
    print filename
于 2012-09-14T08:43:00.970 に答える
12

os.walk()決してやり過ぎではありません。それはjiffyでファイルとディレクトリのリストを生成することができます:

files = [os.path.join(dirpath, filename)
    for (dirpath, dirs, files) in os.walk('.')
    for filename in (dirs + files)]

これをジェネレータに変換して、一度に1つのパスのみを処理し、メモリ上で安全にすることができます。

于 2012-09-14T08:45:07.693 に答える
3

shfindを使用して、Python からプログラム自体を使用することもできます。

import sh
text_files = sh.find(".", "-iname", "*.txt")
于 2012-09-14T21:03:47.520 に答える
1

isdir()それか、 / isfile()andを使用して手動で再帰するか、またはを使用して呼び出すlistdir()ことができます。基本的には最高レベルで、わずかに低いレベルはに基づく半手動のソリューションであり、同じ出力が必要な場合は、何らかの理由でシステムコールを行うことができます.subprocess.check_output()find .os.walk()listdir()find .subprocess

于 2012-09-14T08:36:50.827 に答える
1

pathlib.Path.rglobはとても簡単です。ディレクトリツリー全体をリストします

(引数はファイルパスの検索パターンです。"*"つまり、すべてを一覧表示します)

import pathlib


for path in pathlib.Path("directory_to_list/").rglob("*"):
    print(path)
于 2021-11-16T14:56:32.097 に答える
0
import os
path = "path/to/your/dir"
for (path, dirs, files) in os.walk(path):
    print files

これはやり過ぎですか、何か不足していますか?

于 2012-09-14T08:44:05.353 に答える