2016-10-01 5 views
-1

特定の種類のファイル(例えば、.txt.jpgなど)を検索するためのスクリプトをPythonで作成しようとしています。私は(SOにここを含む投稿を)かなり長い間の周り探し始めたと私は、次のコードスニペットを見つけました:root, dirs, filesが使用されている理由をos.walk(directory) - AttributeError: 'tuple'オブジェクトに 'endswith'属性がありません

for root, dirs, files in os.walk(directory): 
    for file in files: 
     if file.endswith('.txt'): 
      print file 

しかし、私は理解できません。私はちょうどfor file in os.walk(directory)を使用している場合たとえば、それはエラーがスローされます。

"AttributeError: 'tuple' object has no attribute 'endswith'".

は、私がここで何をしないのですか?

ありがとうございます!

答えて

1

理由はdocsで説明されています

For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

ので、root, dirs, filesを使用すると、この3組の収量を処理するPython的な方法です。タプルはendswith属性を持っていない

data = os.walk('/') 
for _ in data: 
    root = _[0] 
    dirs = _[1] 
    files = _[2] 

:そうでなければ、あなたは次のように何かをする必要があると思います。タプルに含まれているかもしれないし、含まれていないかもしれません。

+1

ありがとうございました!私はドキュメントを読んだが、私はそれをあまり理解していなかった。説明をいただきありがとうございます。だから、私たちはタプルを追跡するためのルート、ディレクトリ、ファイルを持っていて、ファイルタプルで必要なファイルを探します。 – geo1230

+0

うん、あなたはそれを持っています。 'root'は、ツリーが探しているディレクトリのパス名です。 'dirs'は、' os.walk'が "ウォーキング"している様々なディレクトリです。 'files'は、dirsに含まれるファイルです。 :-) – n1c9

0

os.walk()は、それぞれがタプルである結果のリストを返します。

各結果に単一の名前を割り当てると、その名前はタプルになります。

タプルには.endswith()メソッドがありません。あなたはos.walkroot, dirs, filesを使用する理由

関連する問題