ここでは私のためにどのような作品のデモで、指定したディレクトリの結果を必要としない何を:エラーが発生しました - 私は
import os
path2 = 'D:\\'
# this works
for curdir, dirlist, flist in os.walk(path2):
pass
# this fails
curdir, dirlist, flist = os.walk(path2)
ここでは私のためにどのような作品のデモで、指定したディレクトリの結果を必要としない何を:エラーが発生しました - 私は
import os
path2 = 'D:\\'
# this works
for curdir, dirlist, flist in os.walk(path2):
pass
# this fails
curdir, dirlist, flist = os.walk(path2)
事がos.walk()
は、発電機を返すことです。そうすること:
curdir, dirlist, flist = os.walk(path2)
おそらく、うまくいかない場合があります。
まず者はこのことを考えてみましょう:
for curdir, dirlist, flist in os.walk(path2):
pass
これは、本質的に名前にos.walk()
によって返された発電機を割り当て、連続StopIteration
が発生するまで、その上next()
を呼び出すのと同じです。発電機は、その3つの以上の値が得られた場合
walk = os.walk(path2)
curdir = next(walk)
dirlist = next(walk)
flist = next(walk)
を:今
walk = os.walk(path2)
try:
while True:
dirpath, dirnames, filenames = next(walk)
... do something ...
except StopIteration:
pass
我々は他の例に戻る場合:上記その後
curdir, dirlist, flist = os.walk(path2)
はやってと同じです失敗しません。しかし、3より小さい値が得られた場合は、解凍する値が3未満であるため、失敗します。
したがって、os.walk()
で返されたジェネレータでは、1つの値しか得られません。
curdir, dirlist, flist = os.walk(path2)
そして、上記の次のようなエラーになります:
ValueError: not enough values to unpack (expected 3, got 1)
あなたが最初の値のみを必要とするので、それはだ場合は、先に行くと直接next()
を呼び出します。しかし、潜在的な潜在的なものをキャッチすることを確認してくださいStopIteration
。
try:
curdir, dirlist, flist = next(os.walk(path2))
except StopIteration:
pass
最後に、あなたが与えられたパスでディレクトリとファイルを取得する簡単な方法としてdirlist
とflist
を利用しているからでない限り。その後、os.walk
は不要で、代わりにos.listdir
またはos.scandir
を使用できます。私はあなたが望むものを正確にあなたの質問を理解していれば
はpath2
自体の内部のすべてのエントリが一覧表示されますpath2
が、os.scandir
のすべてのサブディレクトリ内のファイル/ディレクトリのリストを出力しos.walk
ではありません。ドキュメントから
例は、上記のリンク:
with os.scandir(path) as it:
for entry in it:
if not entry.name.startswith('.') and entry.is_file():
print(entry.name)
となぜあなたが動作するはず失敗1は信じていますか? – Vallentin
'os.walk'はゼロ個以上の3タプルを生成します。アンパックする値が少なすぎたり、アンパックする値が多すぎたりすると、割り当てが失敗します。ちょうど3回の収穫を除いて。その場合でも結果はあなたが期待するものではありません。 –