0
1

More than 3 years have passed since last update.

ファイルの読み書き

Posted at

ファイルの読み書き

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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1