Pythonのファイル入出力(読み込み、書き込み、csv、拡張子や更新日時の取得)
ファイルの読みこみ(tryを使う方法)
ファイルの読み込みはopen、read、closeをセットで行ないます。
- ファイルを開く
- ファイルのデータを取得する
- ファイルを閉じる
プログラムのファイルがあるディレクトリにdata.txtがあり、それを読みとるプログラムを考えます。
data.txt
apple
grape
melon
peach
プログラム
file = open('data.txt', 'r')
try:
data = file.read()
print(data)
finally:
file.close()
出力
apple
grape
melon
peach
openは第一引数をファイル名、第二引数をrとします。ファイル名は相対パスでも絶対パスでもかまいません。その後、例外処理(try)でファイルの中身を取得します。finallyでファイルを閉じます。
ファイルの読みこみ(withを使う方法)
data.txt
りんご
みかん
いちご
メロン
バナナ
プログラム
with open('data.txt', 'r') as file:
data = file.read()
print(data)
出力
りんご
みかん
いちご
メロン
バナナ
try…catchの構文よりもwithを使うほうが安全で、ファイルを閉じる作業を書かずにすみます。
結果をリストにする
readlinesを使うと結果をリストで取得できます。
with open('data.txt', 'r') as file:
data = file.readlines()
print(data)
出力
['りんご\n', 'みかん\n', 'いちご\n', 'メロン\n', 'バナナ']
要素が改行コードを含んでいることに注意してください。この仕様があるため、結局はreadlinesよりもreadを使うほうがわかりやすい。
with open('data.txt', 'r') as file:
data = file.read().splitlines()
print(data)
出力
['りんご', 'みかん', 'いちご', 'メロン', 'バナナ']
splitlinesは改行で文字列を分割する関数です。
1行ずつ書きこむ
リストなどの配列をファイルに書きこむにはwritelinesという関数を使います。ファイルを開き、書きこみ、閉じるというステップはwriteと変わりません。
writelinesは「リストの要素を一行ずつ書きこむ」関数ではありません。要素ごとに改行を入れるプログラムはページの最後に紹介しています。
プログラムのファイルがあるディレクトリにdata.txtがあり、テキストに文字列を書きこむプログラムを考えます。
プログラム
list = ['りんご', 'みかん', 'いちご', 'メロン', 'バナナ']
file = open('data.txt', 'w')
try:
file.writelines(list)
finally:
file.close()
data.txt
りんごみかんいちごメロンバナナ
openは第一引数をファイル名、第二引数をwとします。ファイル名は相対パスでも絶対パスでもかまいません。その後、例外処理(try)でファイルの中身を取得します。finallyでファイルを閉じます。
プログラムを実行するとファイルが上書きされます。最初のデータが消えて「りんごみかんいちごメロンバナナ」になります。openの第二引数にあるwが上書きを意味しています。
上書きでなく追記にしたいときはwをaとします。
「りんごみかんいちごメロンバナナ」を
りんご
みかん
いちご
メロン
バナナ
としたいときは次のようにします。
プログラム
list = ['りんご', 'みかん', 'いちご', 'メロン', 'バナナ']
file = open('data.txt', 'w')
try:
file.write("\n".join(list))
finally:
file.close()
data.txt
りんご
みかん
いちご
メロン
バナナ
"\n".join(list)はlistの要素を改行で結合した文字列です。
csvで読み込み
プログラムのファイルがあるディレクトリにdata.csvがあり、それを読みとるプログラムを考えます。
- csvモジュールをインポートする
- withでファイルを開く
- readerでファイルを読む
data.csv
りんご,みかん
いちご,メロン
プログラム
import csv
data = []
with open('data.csv', 'r') as file:
array = csv.reader(file)
for row in array:
data.append(row)
print(data)
出力
[['りんご', 'みかん'], ['いちご', 'メロン']]
csv.reader(file)のarrayには、csvファイルの中身が改行で区切られた配列のようなもの(リストではない特殊なオブジェクト)が入っています。arrayにある各要素は['りんご','みかん']といったリストです。
ファイルの拡張子を取得する
ファイルの拡張子はos.path.splitextで取得します。
import os.path
path = os.path.splitext('data.csv')
print(path)
出力
('data', '.csv')
ファイル名と拡張子を別に取得するには
import os.path
name, ext = os.path.splitext('data.csv')
print(name)
print(ext)
出力
data
.csv
とします。
ファイルの更新日時・時間をos.statで取得する
ファイルの更新時間はos.statで取得します。
import os
time = os.stat('data.csv').st_mtime
print(time)
出力
1519216976.2002957
さらにdatetimeでわかりやすい日時に変換します。
import os
import datetime
time = os.stat('data.csv').st_mtime
date = datetime.datetime.fromtimestamp(time)
print(time)
print(date)
出力
1519216976.2002957
2018-02-21 21:42:56.200296