【Python8】File I/Oについて(ファイル入出力)

👇それでは下記の記事の続きをやっていこう!
前回までは”エラー(Error)と例外処理(Exception)”について学習してきました。

今回は、Pythonのファイルの入出力(File I/O)処理について触れてみたいと思います。
CSVファイル等のデータ処理ができるようになるとやれる幅も広がってくると思いますので、学習していこう🤓

open関数とwith statement

open関数

✅ ビルトインファンクッションであるopen()を使って該当ファイルを開く
✅open()関数を使うことでファイルにアクセスすることが出来る
✅open()関数で開いたデータはメモリを使ってしまっているので、必ずclose()関数で閉じる

with statement

✅ try, finally構文を使わなくてもopen()関数で開いたデータは、自動的にclose()関数が実行する
✅ データ処理を行う際にデータを開くときは、必ずこの書き方になるので覚えてしまおう

with statement

with open(“<datafile>”) as <変数名f> : <datafile>を<変数名f>に格納し開く

ファイルの読み込み(read)

✅ for文でループで回すことで各行を取得することが出来る
✅ .read():ファイルの中身全てを一つのstringとして読み込む
⚠️ファイルが大きい場合は実行しないように注意(ファイルの中身を一括で取得するため)
✅ .readline():一行ずつ取得しstringで返す(while文で回し取得する)
✅ .readlines():全ての行をlist型で返す

ファイルの書き込み(write)

✅ open()関数の引数にmode=”w”と指定することで書き込みモードで開くことが出来る(デフォルトはmode=”r”,”t” : 読み込みモード)
✅⬆︎この方法は上書きされるので注意⚠️(追加の書き込み方法は後述する)
✅ .write()関数で書き込みを実行する

modeの引数

✅mode=”a” : ファイルの最後尾に内容を書き込み可
✅mode=”r+” : 読み書き両方可能
✅mode=”w+” : 読み書き両方可能(⚠️上書きされるので注意)
✅mode=”a+” : 読み書き両方可能 + positionが最後尾から始まる(上書きされない)

seek(0) : positionをファイルの先頭に移動する (ex. f.seek(0))

csvファイル

✅ CSV : comma separated values. カンマ区切りでデータを保持するフォーマット(拡張子: .csv)
✅ csvモジュールを使いアクセス
✅ カンマ以外にもtab, 『:』, 『;』で区切ることが出来る(区切り文字のことをdelimiterと呼ぶ)

CSVモジュール一覧

csv.reader(<filename>) : list型で取得

csv.DictReader(<filename>) : dictionary型で取得

csv.writer(<filename>) : list型で書き込み

csv.Dictwriter(<filename>) : dictionary型で書き込み

👇 csv.Dictwriter()で書き込んだ結果

jsonファイル

✅ JSON: javascript object notation. Webでのデータ送受信によく使われる(拡張子: .json)
✅ jsonモジュールを使う
✅ jsonファイルにはタプル型の概念はないので、リスト型に変換される

jsonファイル操作

json.load(<jsonfile>) : jsonファイルをpythonのデータ構造(dictionary型)で読み込み

json.dump(<dictionary>, <jsonfile>) : pythonのデータ構造(dictionary型)をjsonファイルに書き込み

json.loads(<dictionary>) : json文字列をpythonのデータ構造(dictionary型)に変換

json.dumps(<dictionary>) : pythonのデータ構造(dictionary型)をjson文字列に変換

👇example.jsonへの出力方法(読み取り)

👇example.jsonへの入力方法(書き込み)

以上で、”File I/Oについて”は終了です、いかがだったでしょうか?

次回は”pythonコードのテスト”について学んでいきます。
個人orチームで実装・開発したコードがある一定の品質を保っているのかを確認する大事な作業になります。テストエンジニアではない人でも、一度は勉強する価値があると思いますので、学習していきましょう!

今回はこの辺で、バイバイ👋