ディレクトリ内検索

ディレクトリ内検索と言うか、ディレクトリ内のファイル一覧を表示してみる。

>>> import os
>>> os.path.join("c:\work\python", "sample001.txt")
'c:\\work\\python\\sample001.txt'
>>> os.path.expanduser("~")
'C:\\Documents and Settings\\username'

おお〜凄いね〜存在しないディレクトリを指定しても特にエラーが出ないね。

>>> os.path.split("c:\work\python\sample001.txt")
('c:\\work\\python', 'sample001.txt')
>>> os.path.splitext("sample001.txt")
('sample001', '.txt')
>>> os.path.splitext("sample001.txt.zip")
('sample001.txt', '.zip')
>>> os.path.splitext("sample001.1.2.3.4.5.6")
('sample001.1.2.3.4.5', '.6')

ファイルバスの分解とファイル名の分解。拡張子は一番最後のものを取得するのね。では拡張子がなければどうなるのよ。

>>> os.path.splitext("sample001")
('sample001', '')

面白いね。少し気になった点。

>>> os.path.split("c:\work\python\test\sample001.txt")
('c:\\work\\python\test', 'sample001.txt')
>>> os.path.split("c:\work\python\test\sample001.txt")[0]
'c:\\work\\python\test'
>>> print os.path.split("c:\work\python\test\sample001.txt")[0]
c:\\work\\python    est

おお〜「\test」の「\t」がタブと認識されているのね。こういった場合は「\\test」とするなり。

ディレクトリ内検索をしてみる。

>>> os.listdir("c:\work\python")
['sample001.py', 'sample002.py', 'sample003.py', 'test']
>>> for i in os.listdir("c:\work\python"):
...   ext = os.path.splitext(i)[1]
...   if ext == '.py':
...     print(i)
...
sample001.py
sample002.py
sample003.py

Pythonスペシャリストは上記「for」文の内容を一行でやっちゃうんだろうね。「"\n".join(...)」とかやって簡単に作るんだろうが今の私には無理だ挑戦してみたがわけわからなくなった。また今度ね。ちなみに文字列の比較って「==」でいいの?1byte文字なら問題ないのかもしれないが2byte文字、日本語の比較ってできるの?そんな関数あるんですか〜「strcmp」とか。

必要になったら調べる。あとグロブ。

>>> import glob
>>> glob.glob('c:\\work\\python\\*.py')
['c:\\work\\python\\sample001.py', 'c:\\work\\python\\sample002.py', 'c:\\work\\python\\sample003.py']

あと「os.path.normcase()」に関して、

>>> os.path.normcase("c:\work\\python\\sample001.py")
'c:\\work\\python\\sample001.py'
>>> os.path.normcase("C:\WORK\\PYTHON\\SAMPLE001.py")
'c:\\work\\python\\sample001.py'

システムで利用するファイル形式の一般化を行う、でいいの。Windowsでは全て小文字とする。Windowsは大文字小文字を区別しないから、区別する場合は変化ないんだろうね。

ふ〜Pythonって面白いよね〜完全にとりこにされた。