Python入門【ファイル操作の基本】

Python ファイル操作

こんにちは、ミナトです。

「Pythonでファイルの編集はどうやるの?」

というあなたのために今回はPythonのファイル操作について解説します。

アプリケーションの開発では、ログファイルを作成したり、CSVファイルを出力したりとファイルを扱うシーンは多く発生します。

初心者にも分かりやすく解説していますので、ぜひご確認ください。

Pythonでファイルの編集ってどうやるの?
なるほど!確かに、アプリケーション開発の中で、ファイルからデータを読み込んだり、ファイルにデータを書き込むシーンはたくさんあるな!
じゃあ、今回はPythonでのファイル操作について解説するで!

ファイル操作の基本

ファイルにアクセスするにはopen()関数を利用します。

第一引数にファイル名(ファイルのパス)、第二引数にモード、第三引数に文字エンコードを指定します。

エンコードは省略可能で、実行環境で定められている文字コードを利用します。例えばmacならUTF-8になります。

open()関数

open(ファイル名, モード, encoding=”エンコード名”)

f = open('sample.txt', 'r', encoding='utf_8')

ファイルの書き込み

ファイルに新規作成で書き込みを行う際は、モードを「w」とします。

f = open('sample.txt', 'w')
f.write('これはテストです。\n')
f.close()

ファイルに追加

ファイルの最終行に追加で書き込みを行う際は、モードを「a」とします。

f = open('sample.txt', 'a')
f.write('これはテストです2。\n')
f.close()

ファイルの読み込み

ファイルの読み込みを行う際は、モードを「r」とします。

全行読み込み

read()メソッドを利用することでファイルの内容全てを取得できます。

f = open('sample.txt', 'r')
body = f.read()
print(body)

## 出力
これはテストです。
これはテストです2。

1行読み込み

readline()メソッドを利用するとファイルの一行を取得できます。

また、再度readline()メソッド実行すると次の行が取得できます。さらに実行すると次と一行ずつ取得していきます。

f = open('sample.txt', 'r')
body = f.readline()
print(body)

## 出力
これはテストです。

行単位で読み込む

readlines()メソッドを利用すると、ファイルの内容を一行ずつ格納したリストを取得できます。

f = open('sample.txt', 'r')
body = f.readlines()
print(body)

## 出力
['これはテストです。\n', 'これはテストです2。\n']

ファイルから一行ずつ読み込んで処理する

for文で繰り返し処理を行うことで、ファイルから一行ずつデータを取得できます。

ファイルから一行ずつデータを取得し、何らかの処理を行いた場合は以下のように記述します。

print()関数の第二引数endに空文字を指定しているのは、print()関数のデフォルトのendが改行となっており、改行が二重に出力されるのを防ぐためです。

f = open('sample.txt', 'r')

for line in f:
    print(line, end='')

## 出力
これはテストです。
これはテストです2。

シーク位置

シーク位置はファイルの現在位置を指し示しています。

ファイルオブジェクトはファイルの現在の位置を覚えていて、記憶されているシーク位置からファイルの読み書きを行います。

tell()メソッドを利用すると現在のシーク位置を取得できます。

read(1)メソッドでファイルからデータを読み込むとシーク位置が変更されます。

AAA
BBX
CCC
f = open('sample.txt', 'r')
print(f.tell())
print(f.read(1))
print(f.tell())

## 出力
0
A
1

また、seek()メソッドを利用して、シーク位置を指定できます。

f = open('sample.txt', 'r')
f.seek(6)
print(f.tell())
print(f.read(1))

## 出力
6
X

with文

with文を利用すると処理実行後に自動で終了してくれます。

つまり、with文を利用するとわざわざclose()メソッドを実行しなくても、処理終了後に自動でファイルを閉じてくれます。

with open('sample.txt', 'r') as f:
    for line in f:
        print(line, end='')

書き込み+読み込み

書き込みと読み込みを同時に行いたい場合はモードを「w+」とします。

以下の例では、書き込んだ後のシーク位置がファイルの末尾になっているので、seek(0)で最初に戻した状態で読み込みを行っています。

with open('sample.txt', 'w+') as f:
    f.write('こんにちは')
    f.seek(0)
    print(f.read())

## 出力
こんにちは

読み込み+書き込み

書き込みと読み込みを同時に行いたい場合はモードを「r+」とします。

with open('sample.txt', 'r+') as f:
    print(f.read())
    f.write('こんばんわ\n')

まとめ

今回はPythonのファイル操作について解説しました。

アプリケーション開発の中でもファイル操作はよく利用するので、実際に手を動かして慣れるようにしましょう。

最後まで読んでいただき、ありがとうございます。

この記事が、「面白いな」、「勉強になったな」という方は、SNSでシェアしていただけると嬉しいです。