動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Python 3.6.0 on virtualenv
https://docs.python.org/3/library/os.html
をふと眺めていて気になった関数os.walk()
。
os.walk(top, topdown=True, onerror=None, followlinks=False)
Generate the file names in a directory tree by walking the tree either top-down or bottom-up.
試してみた (on Python 3.6.0)。
準備
$ mkdir -p TOP/MIDDLE/BOTTOM
$ touch TOP/MIDDLE/mfile1.txt
$ touch TOP/MIDDLE/mfile2.txt
$ touch TOP/MIDDLE/BOTTOM/bfile1.txt
$ touch TOP/MIDDLE/BOTTOM/bfile2.txt
$ touch TOP/tfile1.txt
code > os.walk()の結果を表示
test_python_170327a.py
import os
res = os.walk(".")
for elem in res:
print(elem)
結果
$ python test_python_170327a.py
('.', ['TOP'], ['test_python_170325b.py', 'test_python_170327a.py'])
('./TOP', ['MIDDLE'], ['tfile1.txt'])
('./TOP/MIDDLE', ['BOTTOM'], ['mfile2.txt', 'mfile1.txt'])
('./TOP/MIDDLE/BOTTOM', [], ['bfile2.txt', 'bfile1.txt'])
code > 各ファイルのパスを取得
https://docs.python.org/3/library/os.html
のサンプルコードを参考に以下のように実装した。
test_python_170327b.py
import os
res = os.walk(".")
for elem in res:
dirpath, dirnames, filenames = elem
for afile in filenames:
res = os.path.join(dirpath, afile)
print(res)
結果
$ python test_python_170327b.py
./test_python_170327b.py
./test_python_170325b.py
./test_python_170327a.py
./TOP/tfile1.txt
./TOP/MIDDLE/mfile2.txt
./TOP/MIDDLE/mfile1.txt
./TOP/MIDDLE/BOTTOM/bfile2.txt
./TOP/MIDDLE/BOTTOM/bfile1.txt
code > refactoring後
(追記 2017/03/28)
test_python_170328a.py
import os
for dirpath, dirnames, filenames in os.walk("."):
for afile in filenames:
res = os.path.join(dirpath, afile)
print(res)
余分な処理を整理してすっきりしました。