ファイルの読み書き
osモジュール
各OSに対応したパスを文字列として返す
python.py
import os
os.path.join('usr', 'bin', 'spam')
result.
'usr\\bin\\spam'
※今回はWindows環境であり、文字列の中では\をエスケープする必要があるためこのような出力結果になっている
python.py
my_files = ['accounts.txt', 'datalist.csv', 'invite.docx']
for filename in my_files:
print(os.path.join('C:\\Users\\aswegart', filename))
result.
C:\Users\aswegart\accounts.txt
C:\Users\aswegart\datalist.csv
C:\Users\aswegart\invite.docx
カレントディレクトリのパスを取得する
python.py
os.getcwd()
result.
'C:\\Users\\j-fuk\\code\\jupyter notebook'
カレントディレクトリを変更する
python.py
os.chdir('C:\\Windows\\System32')
os.getcwd()
result.
'C:\\Windows\\System32'
新しいフォルダを作成する
python.py
os.makedirs('C:\\delicious\\walnut\\waffles')
os.makedirs()は、フルパスで指定したフォルダに必要な中間フォルダも作成してくれる
絶対パスを調べる
python.py
os.path.abspath('jupyter notebook')
result.
os.path.abspath('.')
引数が絶対パスか否かを判断
python.py
print(os.path.isabs('.'))
print(os.path.isabs(os.path.abspath('.')))
result.
False
True
第2引数から第1引数への相対パスを返す
第1引数:対象
第2引数:スタート位置
python.py
os.path.relpath('C:\\delicious', 'C:\\Users')
result.
'..\\delicious'
dirnameとbasenameを取得する
python.py
path = 'C:\\Windows\\System32\\calc.exe'
print(os.path.basename(path)) # 引数(パス)の最後のパス区切り記号までの文字列を返す
print(os.path.dirname(path)) # 最後のパス区切り記号より後ろを返す
print(os.path.split(path)) # dirnameとbasenameをタプルとして取得する
result.
calc.exe
C:\Windows\System32
('C:\\Windows\\System32', 'calc.exe')
パスを個々の要素に分解する
※OSに依存しない
python.py
path = 'C:\\Windows\\System32\\calc.exe'
print(path.split(os.sep))
result.
['C:', 'Windows', 'System32', 'calc.exe']
※os.sepには、プログラムを実行しているOSにおけるパス区切り文字が格納されている
ファイルのサイズをバイト単位で返す
python.py
os.path.getsize('C:\\Windows\\System32\\calc.exe')
result.
26112
フォルダ内のファイルとフォルダ名をリスト表示
python.py
os.listdir('.')
result.
['.ipynb_checkpoints',
'Untitled.ipynb',
'ファイルとファイルパス.ipynb',
'文字列操作.ipynb',
'正規表現によるパターンマッチング.ipynb']
ディレクトリ内のファイルの合計サイズを求める**
python.py
total_size = 0
for filename in os.listdir('C:\\Windows\\System32'):
total_size += os.path.getsize(os.path.join('C:\\Windows\\System32', filename))
print(total_size)
result.
976532599
指定したファイルやディレクトリの存在有無
python.py
print(os.path.exists('C:\\Windows'))
print(os.path.exists('C:\\some_made_up_folder'))
result.
True
False
ファイルかディレクトリかを確認する
python.py
print(os.path.isdir('C:\\Windows\\System32'))
print(os.path.isfile('C:\\Windows\\System32'))
print(os.path.isdir('C:\\Windows\\System32\\calc.exe'))
print(os.path.isfile('C:\\Windows\\System32\\calc.exe'))
result.
True
False
False
True
DVDやフラッシュメモリーの接続確認**
python.py
os.path.exists('D:\\')
result.
False
ファイルを読み書きする3つのステップ
1. open()関数でFileオブジェクトを取得する
python.py
fruits_file = open('C:\\demo\\fruits.txt') # デフォルトで読み込みモードで開いている
# 読み込みモードを明示する場合は第2引数に'r'を渡す
# fruits_file = open('C:\\demo\\fruits.txt', 'r')
※open()の戻り値はFileオブジェクト
2. ファイル内容を読み込む
fruits.txt
apple
banana
meron
read()メソッド:ファイル全体を一つの文字列の値として読み込む
python.py
fruits_content1 = fruits_file.read()
fruits_content1
result.
'apple\nbanana\nmeron'
readlines()メソッド:1行ずつの文字列のリストとして読み込む
python.py
# 行ごとに分かれた文字列のリストとして扱うほうが処理しやすいことが多い
fruits_content2 = fruits_file.readlines()
fruits_content2
result.
['apple\n', 'banana\n', 'meron']
3. ファイルを書き込む
ファイルに書き込むには**「書き込みモード, 'w'」または「追記モード, 'a'」**でファイルを開く必要がある。
※指定したファイルが存在しない場合は新規作成される
※書き込みモードや追記モードのときにファイルを閉じ忘れたままプログラムが異常終了すると、ファイル内容が壊れることあり
python.py
fruits_file = open('C:\\demo\\fruits.txt', 'w')
fruits_file.write('lemon\n')
result.
6 # 書き込まれた文字数(改行含む)
python.py
fruits_file = open('C:\\demo\\fruits.txt', 'a')
fruits_file.write('orange\n')
fruits_file.close()
fruits_file = open('C:\\demo\\fruits.txt')
fruits_content = fruits_file.read()
print(fruits_content)
result.
lemon
orange