[解決済み] os.walkの理解は正しいですか?
2022-03-04 19:31:01
質問
のroot, dir, fileのループは、root, dir, fileのループと同じです。
os.walk(startdir)
は、これらのステップを経て動作するのですね。
for root in os.walk(startdir)
for dir in root
for files in dir
-
get root of start dir : C:\dir1dir2startdir
-
C:\dir1dir2startdir 内のフォルダーを取得し、フォルダーのリスト "dirlist" を返します。
-
dirlist の最初の項目にあるファイルを取得し、ファイルのリスト "filelist"として返します。
-
dirlistの2番目の項目に移動し、このフォルダ内のファイルのリスト "filelist2" をファイルリストの2番目の項目として返します。
-
フォルダツリーの次のルートに移動し、2 から開始します。
でしょ?それとも、最初にすべてのルートを取得し、次にすべてのディレクトリを取得し、最後にすべてのファイルを取得するのでしょうか?
解決方法は?
os.walk
は、値のタプル(current_path, current_pathのディレクトリ, current_pathのファイル)を作成するジェネレータを返します。
ジェネレータが呼ばれるたびに、walk が呼び出された最初のディレクトリからさらにサブディレクトリが利用できなくなるまで、各ディレクトリを再帰的にたどります。
このように
os.walk('C:\dir1\dir2\startdir').next()[0] # returns 'C:\dir1\dir2\startdir'
os.walk('C:\dir1\dir2\startdir').next()[1] # returns all the dirs in 'C:\dir1\dir2\startdir'
os.walk('C:\dir1\dir2\startdir').next()[2] # returns all the files in 'C:\dir1\dir2\startdir'
だから
import os.path
....
for path, directories, files in os.walk('C:\dir1\dir2\startdir'):
if file in files:
print('found %s' % os.path.join(path, file))
またはこれ
def search_file(directory = None, file = None):
assert os.path.isdir(directory)
for cur_path, directories, files in os.walk(directory):
if file in files:
return os.path.join(directory, cur_path, file)
return None
または、ファイルを探したい場合は、このようにすることができます。
import os
def search_file(directory = None, file = None):
assert os.path.isdir(directory)
current_path, directories, files = os.walk(directory).next()
if file in files:
return os.path.join(directory, file)
elif directories == '':
return None
else:
for new_directory in directories:
result = search_file(directory = os.path.join(directory, new_directory), file = file)
if result:
return result
return None
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] リストに値が存在するかどうかを確認する最速の方法
-
[解決済み】リストの内容を取り出して、別のリストに追加する
-
[解決済み] Python のディレクトリ、サブディレクトリ、およびファイルの一覧表示
-
[解決済み] Pythonでトップレベルのディレクトリだけをリストアップする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
PythonによるLeNetネットワークモデルの学習と予測
-
PythonはWordの読み書きの変更操作を実装している
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] os.walkでディレクトリを除外する。