進捗

5/5 8:00~9:00 p.381

前後するが忘れないために先に5/5の記録をしておく。os.walk()の学習のためこのページを参考にして色々試した。

前提として第一層のディレクトリにfoo_dir、第二層にbar_dir、第三層にdaz_dirとhogeがある状態である。


>>> for root, dirs, files in os.walk("foo_dir"):
...     dirs = [d for d in dirs if 'hoge' not in os.path.join(root,d)]
...     dirs
... 
['bar_dir']
['daz_dir']
[]
[]

>>> for root, dirs, files in os.walk("foo_dir"):
...     dirs[:] = [d for d in dirs if 'hoge' not in os.path.join(root,d)]
...     dirs[:]
... 
['bar_dir']
['daz_dir']
[]
"""
上から1番目と2番目のコードは、共通して'daz_dir'が入っているリストから'hoge'が外されているのはわかる。[:]がつくことで2番目ののコードではhogeディレクトリのリストが削除されている。
"""

>>> for root, dirs, files in os.walk("foo_dir"):
...     dirs[:] = [os.path.join(root,d) for d in dirs]
...     dirs[:]
... 
['foo_dir/bar_dir']

>>> for root, dirs, files in os.walk("foo_dir"):
...     dirs[:] = [os.path.join(root,d) for d in dirs if 'hoge' not in os.path.join(root,d)]
...     dirs[:]
... 
['foo_dir/bar_dir']
"""
上から3番目と4番目のコードはともにディレクトリのパスを調べるコードを書いた。[:]がついていることで'hoge'を外しているかどうか関係なく、当てはまるそれぞれのディレクトリの共通しているパスの部分だけを[:]が抽出している。
"""