ジム氏によると、___
という構文は、通常、その名前でキャプチャされたもの(___
)は役に立たない、またはごみです。
test
subtest1
file1.txt
file2.txt
subtest2
file3.txt
私はos.walk
test
に使用したときに何が起こるか見て:次のような構造で、私は、フォルダ、test
を持って
:完全を期すために、次の例を見てみましょう
>>> list(os.walk('test'))
[('test', ['subtest1', 'subtest2'], ['.DS_Store']), ('test/subtest1', [], ['file1.txt', 'file2.txt']), ('test/subtest2', [], ['file3.txt'])]
>>> len(list(os.walk('test')))
3
したがって、技術的には、ジェネレータには、os.walk('test')
によって返される3つの要素があります。しかし、いくつかのネストされたデータ構造がはっきり分かるので、各要素内にいくつの要素がありますか?
>>> [len(x) for x in os.walk('test')]
[3, 3, 3]
いいえ、それぞれの要素には、os.walk('test')
という3つのサブ要素があります。例えば、list(os.walk('test'))[0]
には、'test'
(第1の要素)、['subtest1', 'subtest2']
(第2の要素)、および['.DS_Store']
(第3の最終要素)があります。最後の要素には、最初の要素で指定されたフォルダ内のディレクトリ以外のファイルが含まれます(したがって、.DS_Storeはtest
ディレクトリのファイルです)。
(私はまだアンダースコアを使用しません)さんは、その後、あなたのfor
ループに取得してみましょう:
>>> for main_dir, sub_dirs, files in os.walk('test'):
... print("Main directory: ", main_dir)
... print("Sub-directories: ", ', '.join(sub_dirs))
... print("Files: ", ', '.join(files))
...
Main directory: test
Sub-directories: subtest1, subtest2
Files: .DS_Store
Main directory: test/subtest1
Sub-directories:
Files: file1.txt, file2.txt
Main directory: test/subtest2
Sub-directories:
Files: file3.txt
のでfor main_dir, sub_dirs, files in os.walk('test')
構文は我々が呼ん本当に「開梱。」私たちはmain_dir
の最初の要素をos.walk('test')
に、sub_dirs
の2番目の要素に割り当てようとしています(_
)。これは読者に「私が必要とするものを忘れました。 。"あなたの場合、コードは、「これらのファイルが存在するディレクトリを忘れている。私はちょうどファイル名がほしいのです。 "
2行目の[:]も冗長であると思いますか? – Notts90
@ Notts90は'ファイル 'をインプレースで変更します。 –
'_'の代わりに' __'を使う主な理由の1つは、gettextを使っているのですが、 '_'は通常翻訳機能です。 –