進捗

5/4 10:15~13:40 p.381

os.walkの学習を始めた。5/5でも書いたようにここを参考にした。

第一階層にfoo_dir、第二階層にbar_dir、第三階層にdaz_dirとhoge、testとsampleというpythonファイルの入った組み合わせのディレクトリを作って試した。


>>> for dirpath,dirnames,dirfiles in os.walk("foo_dir"):
...     dirnames
... 
['bar_dir']
['daz_dir', 'hoge']
[]
[]
"""
四つのディレクトリをそれぞれリストにして、その中のディレクトリが表示される
"""

>>> for dirpath,dirnames,dirfiles in os.walk("foo_dir"):
...     d = [dirname for dirname in dirnames if 'hoge' not in os.path.join(dirpath,dirname)]
...     d
... 
['bar_dir']
['daz_dir']
[]
[]
"""
リスト内包表記のjoinの引数にdirnamesではなく繰り返しから要素を取り出したdirnameを使うことはできる。加えてjoinの引数にはstrかbyteしか入れられない。dirnamesはlist
"""

進捗

5/3 15:00~16:30 p.380

再帰的にディレクトリを削除するos.removedirs()を使っても一番下の階層のディレクトリしか消えない。
このページのような動きにならない。原因はos.listdir()でわかった。ここに書いてあるように見えない.DS_Storeというファイルが自動生成されているからだ。

進捗

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'を外しているかどうか関係なく、当てはまるそれぞれのディレクトリの共通しているパスの部分だけを[:]が抽出している。
"""

進捗

5/1 17:30~19:00 p.379

os.mdkir()について調べてた。第二引数のモードを指定することでアクセス権限を与えられる。公式ドキュメントに書いてあるように0oから始まる8進数で書く。このページのリストを見ると数値の参考になる。変更する際にはos.chmod()を使う。

ファイルやフォルダの利用者ごとのアクセス権限を確認するにはこのページ別のページを参考にしてコマンドを使う。pythonから離脱するのは手間ではあるが、このページのos.listdir()や他のページのos.access()ではグループやその他ユーザーのアクセス権限まではわからない。今のところはこのやり方なのかなと思う。