Tips

Pythonを使ったファイルの読み込みと書き込み(作成)やZIPで圧縮と解凍などを解説【with, open, readline, write, read, zipfile, namelist, b64encode, b64decode】

  • このエントリーをはてなブックマークに追加

プログラミングの世界に足を踏み入れると、時折避けて通れないのがファイルの操作です。

特にPythonでは、そのシンプルな構文と強力な機能によってファイルの読み込みと書き込みが驚くほど簡単に行えます。

この記事では、初心者の方々に向けてPythonにおけるファイル操作の基本を解説します。

Pythonにおけるファイルの取り扱いにはいくつかのキーワードが登場しますが、その中でも特に重要なのがwithopenです。

そしてreadlinewritereadなどの関数を組み合わせることで、ファイルからのデータ読み込みや書き込みを実現できます。

この記事ではこれらの概念をわかりやすく説明し実際のコード例を交えて具体的な使い方を探っていきます。

また動画もあるので必要な方はご覧ください。

Pythonを使ってファイル操作をする方法

Pythonのようなバックエンド言語を使うメリットの一つにパソコン内のファイル操作があります。

自分の端末に保管されている画像、動画、CSVなどファイルを読み込んで情報を取得したり、データを更新することを自動化できます。

本章ではテキストファイルを題材にして文法解説をしていきます。

Pythonを使ってテキストファイルの読み込みを行う方法

Pythonでは以下のwithと言うキーワードを使ったopenメソッドでファイル読み込みが可能です。

第一引数にパス名、第二引数に文字列「r」を指定します。

with open("demo-document.txt", "r") as f:
  text = f.read()
print(text)

テキストファイルに書かれている文字列を取得できています。

複数行ある場合にはreadメソッドをreadlinesメソッドに変更すれば1行単位で分けられた文章を要素に持つリストを取得できます。

with open("demo-document.txt", "r") as f:
  # 1行ずつに分けることができる
  text = f.readlines()
print(text)

for index,  line in enumerate(text):
  print(str(index), ":", line)

リストになっているので後は繰り返しで取得すれば良いわけですね。

Pythonを使ってテキストファイルに書き込みを行う方法

続いて書き込みについてです。

書き込みはwriteメソッドを使って引数に書き込む内容を入れます。

書き込みが完了したかどうかはエラーの有無で判断できますが、先ほどのreadメソッドで再度読み込みしても内容を確認できます。

with open("demo-document.txt", "w") as f:
  text = f.write("お疲れ様です")

with open("demo-document.txt", "r") as f:
  text = f.read()
print(text)

また複数行の書き込みはwritelinesメソッドというもので引数にリストを指定します。

with open("demo-document.txt", "w") as f:
  # 複数入れるときはリストにする
  text = f.writelines(["こんばんは", "Python"])

with open("demo-document.txt", "r") as f:
  text = f.read()
print(text)

Pythonを使ってCSVを読み込む方法

続いてCSVファイルについてです。

CSVファイルについてはcsvモジュールというものを使って以下のように書くと読み込みます。

import csv
with open("/content/data.csv", newline="") as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)

1行を1リストとして取得するようになっていて、ヘッダー行を無視したいときは以下のようにすると良いです。

import csv
with open("/content/data.csv", newline="") as f:
  reader = csv.reader(f)
  # ヘッダーを使用しないとき
  header = next(reader)
  for row in reader:
    print(row)

Pythonを使ってCSVファイルを書き込み(作成)する方法

続いて書き込みは以下のようにして、openメソッドの第二引数を「w」に変更します。

また書き込む内容はwriterメソッドを使用します。

new_row = [
    ['名前','学籍番号','性別','年齢'],
    ['佐藤大輔', '4', '男性', '22'],
    ['橋本智子', '5', '女性', '23'],
]
with open("/content/date1.csv", "w", newline="") as f:
  writer = csv.writer(f, lineterminator="\n")
  for row in new_row:
    writer.writerow(row) 
  # data1.csvという名前のファイルで中身はnew_rowになる

Pythonを使って画像データをテキスト形式に変換して読み込む方法

続いては画像データです。

画像データはそのまま扱うのではなく一度テキスト形式に変換してから扱って、画面に表示するときにテキスト形式から画像に戻すという考え方です。

import base64

# Base64はバイナリーデータをテキストに変換する仕様の一つで画像をテキスト化するときに使う(データの送信に役立つ)
with open("/content/sample.jpeg", "br") as f:
  image = f.read()
  image = base64.b64encode(image).decode()
  print(image)

画像データの正式なデータの種類はバイナリーデータという以下のようなデータです。

これを上記コードのbase64.b64encode(image).decode()という部分でテキスト形式に変換していて、変換されたら以下のように見た目が変わります。

一度テキスト形式に変換した画像をバイナリーデータに戻すには以下のように書きます。

import base64
# 元のバイナリーデータの画像に戻す
image = base64.b64decode(image.encode())
with open("/content/sample1.jpeg", "bw") as f:
  f.write(image)

Pythonを使ってZIPファイルを読み込む方法

最後にZIPファイルを紹介します。

zipfileモジュールというものを使って、ZIPファイルは中身を見るだけであれば以下のようにします。

import zipfile
with zipfile.ZipFile("/content/sample.zip", "r") as f:
  print(f.namelist())

中身を確認できましたらが、現状だと中身のファイルを別の用途に使用することができません。

ZIP形式になっているデータは一度解凍することでデータを使用できるようになります。

import zipfile

with zipfile.ZipFile("/content/sample.zip", "r") as f:
  f.extractall(r'./download')

また逆にZIPファイルを作成するときはファイルをまとめるだけでなく圧縮する必要があります。

import zipfile

with zipfile.ZipFile("./dowload2.zip", "w") as f:
  f.write("./download1")

すでに圧縮してしまったZIPファイルに後からデータを追加することもできます。

import zipfile

with zipfile.ZipFile("./dowload2.zip", "w") as f:
  f.write("./download1")

# 後からデータを追加
with zipfile.ZipFile("./dowload2.zip", "a") as f:
  f.write("./download")

今まで読み込み系は「r」で書き込み系は「w」でしたが、ZIPファイルに後からデータを追加するときは「a」というモードになるのを注意しましょう。

日常生活でZIPファイルを使ったことがないとイメージしにくいと思いますので、一度ご自身のパソコンで画像を何枚かフォルダにまとめて圧縮、解凍することを手作業で経験しておくことをお勧めします。

こちらの本を参考にして作成しました。
良ければこちらからどうぞ。

  • このエントリーをはてなブックマークに追加