Python - よく使うモジュール - システム・プラットフォーム - ファイル・ディレクトリ

クラウディア 
1. 概要
2. 自身のファイル名やパスの取得
3. カレントディレクトリの移動
4. ディレクトリ作成
5. ディレクトリかファイルか
6. ファイルの存在有無
7. ファイルの拡張子を取得

1. 概要

 ファイルやディレクトリ、パスの扱いについて、提供しています。  本ページは、下記のサイトを参考にさせていただきました。
Python でファイルの存在確認をする - Python のファイル入出力 - Python の基本 - Python 入門」
「Python でパス文字列からファイル名・フォルダ名・拡張子を取得、結合

2. 自身のファイル名やパスの取得


from os import path

print(path.basename(__file__))
print(path.abspath(__file__))
print(path.dirname(__file__))
 というソースを書いて。

/home/hogehoge/lang/python/file/
 というディレクトリ下で実行すると、以下のような結果が得られます。

basename.py
/home/hogehoge/lang/python/file/basename.py
/home/hogehoge/lang/python/file
 ソースの  1行目は、まだ理解していませんが 「path」のモジュールを使用する際には、こういう書き方をするようです(次項で理解できました)。  3行目は、ファイル名の取得  4行目は、絶対パス名の取得  5行目は、相対パス名の取得  になりますが、実行している環境のせいで 5行目が相対パスと言うのはわかりにくいかと思います。  ホームディレクトリの取得は、下記の2つの書き方があって

os.environ['HOME']
os.path.expanduser('~')
 やってみていませんが、下の方の例は、「Windows」でも使えるそうです。

3. カレントディレクトリの移動

import os

print(os.getcwd())
os.chdir(os.path.dirname(__file__))
print(os.getcwd())

 というソースを書いて、実行すると実行開始時のディレクトリを出力し、ロードモジュールの存在するディレクトリに移動して、そのディレクトリを表示します(セキュリティ上の問題で実行結果をそのまま載せることはできませんでした)。  前項の1行目で理解できなかったのが、つまり、ネストするモジュールの下の部分のみ import する方法があの import 方法で、そうやって import すれば、使用する際に 上位のモジュールの記述が省略できるということのようです。

4. ディレクトリ作成

 参考サイトによれば、ディレクトリ作成は、「os.mkdir()」と「os.makedirs()」というのがあります。  後者の方が新しく、わたしには、使い勝手がいいように見えます。  すなわち、よくある、「なければ作成する」という処理ができる。  あってもエラーにはしないし、再帰的にディレクトリを作成できるようです。  「FreeBSD」の「mkdir」の「-p」オプションと同じかな。

os.makedirs('/パス1/パス2/パス3', exist_ok=True)
 みたいな書き方をすれば、「OK」のようです。  相対パスも絶対パスもいけそうなので、これは、とても・・・イイ!

5. ディレクトリかファイルか

 わたしには、よくある場面なのですが、あるパスが、ディレクトリかファイルかを調べるということ。  これは

os.path.isdir(path)
 で調べることができます。  戻り値が、「True」であれば、ディレクトリ、そうでなければ、ファイルと判断することができます。

6. ファイルの存在有無

 前項の逆でもあるのですが・・・。

os.path.isfile(path)
 で、ファイルが存在する場合、「True」になります。

7. ファイルの拡張子を取得

 「os.oath.splitext()」というメソッドが、ありまして。  ファイル名を、パスおよびファイル名の文字列と拡張子に分割します。

import os
print(os.path.splitext('/img/FreeBSD/windows/vs/05/04/02/01.png'))
 を実行すると下記の結果が得られます。

('/img/FreeBSD/windows/vs/05/04/02/01', '.png')
 拡張子だけほしい場合は、配列のおけつのみ取得すればよいことになります。

import os
print(os.path.splitext('/img/FreeBSD/windows/vs/05/04/02/01.png')[-1])
 を実行すると下記の結果が得られます。

.png
earthcar(アースカー)
世界最大級のオンライン英会話EF English Live