Irohabook
0
2273

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
次の記事

ファイルとディレクトリ