Python - パス・ファイル名の操作
公開日:2019-12-06 更新日:2019-12-06
[Python]
1. 概要
パス・ファイル名の操作についてです。
2. カレントディレクトリのパスの設定・取得
# 取得
print( os.getcwd() ) # D:\python\test
# 設定
os.chdir("D:/python")
# 取得(パスが変わる)
print( os.getcwd() ) # D:\python
3. 絶対パスの取得
ファイル名から絶対パスを取得します。
基準となるディレクトリのパスは、
実行しているスクリプトがあるディレクトリではなく、
カレントディレクトリ(os.getcwd())になります。
基準となるディレクトリのパスは、
実行しているスクリプトがあるディレクトリではなく、
カレントディレクトリ(os.getcwd())になります。
print(os.path.abspath('test.txt')) # D:\python\test\test.txt
print(os.path.abspath('../test.txt')) # D:\python\test.txt
print(os.path.abspath('d:/test.txt')) # d:\test.txt
4. パスからファイル名の取得
print( os.path.basename('test.txt') ) # test.txt
print( os.path.basename('d:/test/test.txt') ) # test.txt
print( os.path.basename('d:/test/') ) # (空)
print( os.path.basename('d:/test') ) # test
5. ディレクトリのパスの取得
print( os.path.dirname('d:/test/test.txt') ) # d:/test
print( os.path.dirname('d:/test/') ) # d:/test
print( os.path.dirname('d:/test') ) # d:/
print( os.path.dirname('test.txt') ) # (空)
6. 親ディレクトリ名の取得
dir_path = os.path.dirname('d:/test/test.txt')
print( dir_path ) # d:/test
print( os.path.basename(dir_path) ) # test
7. 2階層上のディレクトリのパスの取得
dir2 = os.path.dirname('d:/dir1/dir2/test.txt')
dir1 = os.path.dirname(dir2)
print( dir2 ) # d:/dir1/dir2
print( dir1 ) # d:/dir1
8. フォルダやファイルの存在チェック
print( os.path.exists('D:/python/test/test.py') ) # True
print( os.path.exists('D:/python/test/存在しない') ) # False
print( os.path.exists('D:/python/test/') ) # True
print( os.path.exists('D:/python/test') ) # True
9. ファイルかどうかの判定
print( os.path.isfile('D:/python/test/test.py') ) # True
print( os.path.isfile('D:/python/test/') ) # False
print( os.path.isfile('D:/python/test') ) # False
print( os.path.isfile('D:/python/存在しない') ) # False
存在しないファイルの場合 False を返しますが、
厳密にファイルの存在チェックをする場合は exists() を使用してください。
ファイル名と同じ名前のディレクトリがある可能性があります。
10. ディレクトリかどうかの判定
print( os.path.isdir('D:/python/test/test.py') ) # False
print( os.path.isdir('D:/python/test/') ) # True
print( os.path.isdir('D:/python/test') ) # True
print( os.path.isfile('D:/python/存在しない') ) # False
11. 環境変数の展開
環境変数を割り当てられているパスに変換します。
ユーザにパスを指定させる場面で、環境変数の使用を許可させたい場合に使用すると良いと思います。
print( os.path.expandvars('%TEMP%/test.py') ) # C:\Users\guest\AppData\Local\Temp/test.py
ユーザにパスを指定させる場面で、環境変数の使用を許可させたい場合に使用すると良いと思います。
12. ファイルサイズの取得
print( os.path.getsize('D:/python/test/test.py') ) # 2645
13. ファイルの作成日時、更新日時、アクセス日時の取得
import os
import time
path = 'D:/python/test/test.py'
c_time = os.path.getctime(path)
m_time = os.path.getmtime(path)
a_time = os.path.getatime(path)
print( c_time ) # 作成日時。エポック(基準日時)からの経過時間 1575176483.1841033
print( m_time ) # 更新日時
print( a_time ) # アクセス日時
print( time.gmtime(0) ) # エポック(基準日時)の取得 1970/01/01 00:00:00
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
# 経過時間から年月日時分秒を取得します
print( time.localtime(c_time).tm_year ) # 2019
print( time.localtime(c_time).tm_mon ) # 12
print( time.localtime(c_time).tm_mday ) # 1
print( time.localtime(c_time).tm_hour ) # 14
print( time.localtime(c_time).tm_min ) # 1
print( time.localtime(c_time).tm_sec ) # 23
14. パスの結合
print( os.path.join('c:/', 'test.txt') ) # c:/test.txt
print( os.path.join('c:', 'test.txt') ) # c:test.txt (要注意)
print( os.path.join('c:/dir1/dir2', 'test.txt') ) # c:/dir1/dir2\test.txt
print( os.path.join('c:/','dir1', 'dir2', 'test.txt') ) # c:/dir1\dir2\test.txt
15. パスの正規化
区切り文字の統一、../ の除去などを行います。
print( os.path.normpath('c:/dir1/../dir2/test.txt') ) # c:\dir2\test.txt
print( os.path.normpath('c:/dir1\\dir2/test.txt') ) # c:\dir1\dir2\test.txt
print( os.path.normpath('c:/dir1') ) # c:\dir1
print( os.path.normpath('c:/dir1/') ) # c:\dir1
print( os.path.normpath('c:/dir1///') ) # c:\dir1
print( os.path.normpath('c:///dir1///') ) # c:\dir1
print( os.path.normpath('../dir1/test.txt') ) # ..\dir1\test.txt
16. パスの分解
ディレクトリとファイル名、ファイル名と拡張子、ドライブとそれ以外のようにパスを分解します。
print( os.path.split('c:/dir1/dir2/test.txt') ) # ('c:/dir1/dir2', 'test.txt')
print( os.path.splitext('c:/dir1/dir2/test.txt') ) # ('c:/dir1/dir2/test', '.txt')
print( os.path.splitdrive('c:/dir1/dir2/test.txt') ) # ('c:', '/dir1/dir2/test.txt')
17. 相対パスの取得
print( os.path.relpath('c:/dir1/dir2', 'c:/dir_a/dir_b') ) # ..\..\dir1\dir2
18. 同じパスかどうかの判定
異なる表記のパスが同じかどうかを判定します。
print( os.getcwd() ) # D:\python\test
print( os.path.samefile('d:/python/test/test.py', 'test.py') ) # True
print( os.path.samefile('d:/python/test/test.py', 'd:/python/test/../test/test.py') ) # True
print( os.path.samefile('d:/python/test', '../test') ) # True