MQL5システムトレーダーの為のPython講座:第20回「ファイルの読み込みや書き込み、作成、圧縮や展開について」

Python
スポンサーリンク
スポンサーリンク
  1. はじめに
  2. ファイルの種類
    1. テキストファイル
    2. バイナリファイル
  3. ファイルの作成と書き込み
    1. open()関数について
    2. close()メソッドについて
    3. 1. ファイルの作成と書き込みの基本
      1. サンプルコード
    4. 2. with構文を使った書き込み
      1. サンプルコード
    5. 3. 改行を含むテキストの書き込み
      1. サンプルコード
    6. 4. 追記モードを使った書き込み
      1. サンプルコード
  4. ファイルの読み込み
    1. 1. ファイル全体を読み込む
      1. read()メソッドについて
        1. サンプルコード
    2. 2. ファイルを1行ずつ読み込む
      1. readline()メソッドについて
        1. サンプルコード
    3. 3. すべての行を順に読み込む
      1. サンプルコード
    4. 4. ファイル内容をリストとして取得
      1. readlines()メソッドについて
        1. サンプルコード
  5. ファイルの読み書きモード
    1. 1. r+モード
      1. サンプルコード
    2. 2. w+モード
      1. サンプルコード
    3. 3. a+モード
      1. サンプルコード
    4. seek()メソッドについて
  6. CSVファイルの操作
    1. 1. CSVファイルの作成と書き込み
      1. サンプルコード
    2. writerow()メソッドについて
    3. 2. 複数行の書き込み
      1. サンプルコード
    4. writerows()メソッドについて
    5. 3. CSVファイルの読み込み
      1. readerメソッドについて
        1. サンプルコード
  7. ファイルの圧縮と展開
    1. 1. ZIPファイルの作成
      1. サンプルコード
    2. 2. ZIPファイルへの追加
      1. サンプルコード
    3. 3. ZIPファイルの展開
      1. サンプルコード
    4. 4. 圧縮方式とレベルの指定
      1. サンプルコード
    5. extractall()メソッドについて
  8. まとめ

はじめに

前回の記事では、Pythonの「組み込み関数」について学びました。

今回は、Pythonを使ったファイル操作に焦点を当て、次の内容を扱います。

  • ファイルの種類についての基礎知識
  • ファイルの作成と書き込み方法
  • ファイルの読み込み方法
  • CSVファイルの操作方法
  • ファイルの圧縮と展開

これらを通じて、Pythonでファイルを効率的に扱う方法を学びます。

ファイルの種類

ファイルは大きく分けて2種類あります。テキストファイルバイナリファイルです。

テキストファイル


人間が読める形式でデータが保存されているファイルです。文字コードを使って保存されるため、テキストエディターで内容を確認できます。例えば、メモ帳で作成された.txtファイルなどがこれに該当します。

バイナリファイル


コンピュータが解釈できる形式でデータが保存されています。データは0と1のビットとして表現されており、直接読み取ることはできません。画像ファイルや音声ファイルなどがこれに該当します。

なお、テキストファイルも内部では0と1のデータとして扱われますが、人間が読める形式で保存されているため、バイナリファイルとは区別して扱います。

今回は、テキストファイルを中心に操作方法を学びます。

ファイルの作成と書き込み

Pythonでは、open()関数を使ってファイルを作成し、内容を書き込むことができます。

open()関数について

open()関数は、Pythonでファイルを操作する際に使用する基本的な関数です。第1引数にファイル名を指定し、第2引数にモード(例:"r""w""a"など)を指定することで、ファイルを読み込み、書き込み、追記などの操作が可能です。この関数を使用して開いたファイルは、操作後にclose()メソッドで明示的に閉じる必要があります。

close()メソッドについて

close()メソッドは、開いたファイルを明示的に閉じるためのメソッドです。ファイルを閉じることで、システムリソースが解放され、データの保存が確実になります。

※後述するwith構文を使用すると、自動的にファイルが閉じられるため、close()メソッドの記述が不要になります。

以下に基本的な操作手順を説明します。


1. ファイルの作成と書き込みの基本

open()関数にファイル名とモード(操作の種類)を指定してファイルを作成します。モードにはwを指定します。これは「書き込みモード」を意味し、新しいファイルを作成します。既に同じ名前のファイルが存在している場合、上書きされます。

サンプルコード

# ファイルを作成し、内容を書き込むサンプルコード

# open()関数で新しいファイルを作成します
# 第1引数:作成するファイルの名前
# 第2引数:モード 'w'(書き込みモードを指定)
file = open("sample.txt", "w")

# ファイルにテキストを書き込みます
# write()メソッドを使って、文字列をファイルに書き込みます
file.write("これはテストファイルです。\n")
file.write("Pythonでファイル操作を学習中です。\n")

# ファイルを閉じます
# close()メソッドを使って、ファイルを閉じることでデータが保存されます
file.close()

2. with構文を使った書き込み

with構文を使用すると、ファイル操作の終了時に自動的にファイルが閉じられるため、安全に扱えます。

サンプルコード

# with構文を使ったファイル作成と書き込み

# with構文を使うと、明示的にclose()を呼び出す必要がありません
with open("sample_with.txt", "w") as file:
    # ファイルにテキストを書き込みます
    file.write("with構文を使っています。\n")
    file.write("自動でファイルが閉じられます。\n")

※asは、with構文内で指定したリソース(例えばファイル)を、特定の変数名で参照できるようにするためのキーワードです。この変数を使うことで、ファイル操作メソッド(例:writeread()メソッド)を簡潔に呼び出すことができます。

3. 改行を含むテキストの書き込み

改行を含むテキストをそのままファイルに書き込む場合、トリプルクォートを使う方法があります。

サンプルコード

# 改行を含むテキストをファイルに書き込むサンプル

# 改行を含むテキストをトリプルクォートで記述します
text = """りんご
ぶどう
オレンジ
バナナ"""

# with構文を使ってファイルを作成し、書き込みます
with open("fruits.txt", "w") as file:
    # 変数textの内容をそのままファイルに書き込みます
    file.write(text)

4. 追記モードを使った書き込み

既存のファイルに新しい内容を追加する場合は、モードにa(アペンド)を指定します。

サンプルコード

# 既存のファイルに内容を追加するサンプル

# 追記モード 'a' を使ってファイルを開きます
with open("fruits.txt", "a") as file:
    # ファイルの末尾に新しい行を追加します
    file.write("\nパイナップル")

これらの方法を使うことで、さまざまな形でファイルにデータを書き込むことが可能です。次はファイルの読み込み方法について説明します。

ファイルの読み込み

Pythonでは、open()関数を使用してファイルの内容を読み込むことができます。モードに"r"(リードモード)を指定することで、ファイルを読み込む準備が整います。


1. ファイル全体を読み込む

ファイルのすべての内容を一度に読み込む場合、read()メソッドを使用します。

read()メソッドについて

read()メソッドは、ファイル全体の内容を一度に読み込むためのメソッドです。ファイルの内容を文字列として取得します。

サンプルコード
# ファイル全体を一度に読み込むサンプルコード

# with構文を使ってファイルを開きます
with open("sample.txt", "r") as file:
    # read()メソッドでファイル全体を読み込みます
    content = file.read()

# 読み込んだ内容を表示します
print(content)

2. ファイルを1行ずつ読み込む

readline()メソッドを使用すると、ファイルの内容を1行ずつ読み込むことができます。

readline()メソッドについて

readline()メソッドは、ファイルの内容を1行ずつ順番に読み込むためのメソッドです。次の行を読み込むたびにカーソルが進みます。

サンプルコード
# ファイルを1行ずつ読み込むサンプルコード

# with構文を使ってファイルを開きます
with open("sample.txt", "r") as file:
    # readline()メソッドで1行目を読み込みます
    line = file.readline()

# 読み込んだ1行目を表示します
print(line)

3. すべての行を順に読み込む

複数行を順番に処理する場合は、forループを使うと便利です。

サンプルコード

# ファイルをすべての行を順に読み込むサンプルコード

# with構文を使ってファイルを開きます
with open("sample.txt", "r") as file:
    # for文を使って各行を繰り返し処理します
    for line in file:
        # 各行を表示します
        print(line, end="")  # 改行を防ぐためにend=""を指定

4. ファイル内容をリストとして取得

readlines()メソッドを使用すると、ファイルのすべての行をリストとして取得できます。

readlines()メソッドについて

readlines()メソッドは、ファイル全体を行ごとに分割し、各行を要素とするリストとして取得するメソッドです。

サンプルコード
# ファイルの内容をリストとして取得するサンプルコード

# with構文を使ってファイルを開きます
with open("sample.txt", "r") as file:
    # readlines()メソッドで全行をリストとして取得します
    lines = file.readlines()

# リストの内容を1行ずつ表示します
for line in lines:
    print(line, end="")  # 改行を防ぐためにend=""を指定

これらの方法を使えば、ファイルの内容を簡単に取得して活用できます。次は、読み込みと書き込みを同時に行う方法について説明します。

ファイルの読み書きモード

Pythonでは、ファイルの読み込みと書き込みを同時に行うために、以下のモードを使用します。r+w+a+のそれぞれで挙動が異なります。


1. r+モード

r+モードは、ファイルを読み込みつつ、書き込みも行うことができるモードです。ただし、読み込みモードが基本となるため、ファイルが存在しない場合はエラーになります。

サンプルコード

# r+モードを使ったファイルの読み書き

# ファイルをr+モードで開きます
with open("sample.txt", "r+") as file:
    # ファイルの内容を読み込みます
    content = file.read()
    print("読み込んだ内容:", content)
    
    # ファイルの末尾に新しい内容を書き込みます
    file.write("\n新しい内容を追加しました。")

2. w+モード

w+モードは、ファイルを書き込みつつ、読み込みも行うことができるモードです。書き込みモードが基本となるため、既存のファイルは上書きされ、存在しない場合は新規作成されます。

サンプルコード

# w+モードを使ったファイルの読み書き

# ファイルをw+モードで開きます
with open("new_sample.txt", "w+") as file:
    # ファイルに内容を書き込みます
    file.write("最初の内容を書き込みます。\n")
    
    # ファイルの先頭にカーソルを戻します
    file.seek(0)
    
    # ファイルの内容を読み込みます
    content = file.read()
    print("書き込んだ内容:", content)

3. a+モード

a+モードは、ファイルに追記しつつ、読み込みも行うことができるモードです。追記モードが基本となるため、ファイルの末尾にデータを追加します。ファイルが存在しない場合は新規作成されます。

サンプルコード

# a+モードを使ったファイルの読み書き

# ファイルをa+モードで開きます
with open("append_sample.txt", "a+") as file:
    # ファイルの末尾に内容を追加します
    file.write("追記された内容です。\n")
    
    # ファイルの先頭にカーソルを戻します
    file.seek(0)
    
    # ファイル全体を読み込みます
    content = file.read()
    print("ファイルの全内容:", content)

seek()メソッドについて

seek()メソッドは、ファイル内のカーソル位置を移動するためのメソッドです。引数に指定した位置にカーソルを移動することで、任意の位置から読み書きが可能になります。


これらのモードとメソッドを活用することで、ファイルの内容を柔軟に操作できます。次はCSVファイルの操作について説明します。

CSVファイルの操作

CSVファイル(カンマ区切り値ファイル)は、データをテキスト形式で保存する際によく使われます。Pythonでは、csvモジュールを利用することで簡単にCSVファイルを操作できます。


1. CSVファイルの作成と書き込み

サンプルコード

# CSVファイルの作成と1行の書き込み

# csvモジュールをインポートします
import csv

# with構文を使ってCSVファイルを作成します
with open("sample.csv", "w", newline="") as file:
    # csv.writerを使ってライターオブジェクトを作成します
    writer = csv.writer(file)
    
    # writerow()メソッドで1行分のデータを書き込みます
    writer.writerow(["名前", "年齢", "職業"])
    writer.writerow(["山田", 30, "エンジニア"])

writerow()メソッドについて

writerow()メソッドは、CSVファイルに1行分のデータをリスト形式で書き込むメソッドです。リスト内の要素がカンマ区切りで保存されます。


2. 複数行の書き込み

サンプルコード

# CSVファイルに複数行のデータを書き込む

# csvモジュールをインポートします
import csv

# with構文を使ってCSVファイルを作成します
with open("sample_multiple.csv", "w", newline="") as file:
    # csv.writerを使ってライターオブジェクトを作成します
    writer = csv.writer(file)
    
    # writerows()メソッドで複数行のデータを一括で書き込みます
    writer.writerows([
        ["名前", "年齢", "職業"],
        ["田中", 25, "デザイナー"],
        ["鈴木", 28, "プログラマー"],
        ["高橋", 35, "プロジェクトマネージャー"]
    ])

writerows()メソッドについて

writerows()メソッドは、CSVファイルに複数行のデータを一括で書き込むメソッドです。リストリスト(2次元配列)を引数として受け取り、各リストを1行として書き込みます。


3. CSVファイルの読み込み

CSVファイルを読み込む際には、csv.readerを利用します。これにより、各行をリスト形式で取得できます。

readerメソッドについて

readerメソッドは、CSVファイルを読み込むために使用するメソッドです。このメソッドを利用して作成されるリーダーオブジェクトは、ファイル内の各行をリスト形式で順に取得することができます。forループを使って行ごとのデータを簡単に処理できます。

サンプルコード
# CSVファイルを読み込む

# csvモジュールをインポートします
import csv

# with構文を使ってCSVファイルを開きます
with open("sample_multiple.csv", "r") as file:
    # csv.readerを使ってリーダーオブジェクトを作成します
    reader = csv.reader(file)
    
    # 各行を1行ずつ取り出して表示します
    for row in reader:
        print(row)

これらを活用すれば、データの作成、保存、読み込みが効率的に行えます。次はファイルの圧縮と展開について解説します。

ファイルの圧縮と展開

Pythonでは、zipfileモジュールを使用してファイルを圧縮したり、圧縮されたファイルを展開することができます。ZIP形式のファイルを簡単に操作できる便利な標準ライブラリです。


1. ZIPファイルの作成

zipfile.ZipFileを使い、新しいZIPファイルを作成します。モードに"w"を指定することで、ファイルを新規作成して圧縮できます。

サンプルコード

# ZIPファイルを作成するサンプルコード

# zipfileモジュールをインポートします
import zipfile

# with構文を使ってZIPファイルを作成します
with zipfile.ZipFile("sample.zip", "w") as zip_file:
    # ファイルを圧縮します
    zip_file.write("sample.txt")  # 圧縮するファイル名を指定
    zip_file.write("sample_multiple.csv")  # 複数のファイルも追加可能

2. ZIPファイルへの追加

既存のZIPファイルに新しいファイルを追加する場合は、モードに"a"を指定します。

サンプルコード

# 既存のZIPファイルにファイルを追加するサンプルコード

# zipfileモジュールをインポートします
import zipfile

# ZIPファイルを追記モードで開きます
with zipfile.ZipFile("sample.zip", "a") as zip_file:
    # ファイルを追加します
    zip_file.write("append_sample.txt")  # 追加するファイル名を指定

3. ZIPファイルの展開

圧縮されたZIPファイルを展開する場合は、extractall()メソッドを使用します。展開先のディレクトリを指定することもできます。

サンプルコード

# ZIPファイルを展開するサンプルコード

# zipfileモジュールをインポートします
import zipfile

# ZIPファイルを読み込みモードで開きます
with zipfile.ZipFile("sample.zip", "r") as zip_file:
    # 全てのファイルを展開します
    zip_file.extractall("extracted_files")  # 展開先フォルダを指定

4. 圧縮方式とレベルの指定

zipfile.ZipFileでは、圧縮方式や圧縮レベルを指定することも可能です。圧縮方式にはzipfile.ZIP_DEFLATEDを指定し、圧縮レベルを1~9で設定します(デフォルトはZIP_STOREDで無圧縮)。

サンプルコード

# 圧縮方式と圧縮レベルを指定したZIPファイル作成

# zipfileモジュールをインポートします
import zipfile

# 圧縮レベルを指定してZIPファイルを作成します
with zipfile.ZipFile("compressed.zip", "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip_file:
    # 圧縮するファイルを指定します
    zip_file.write("sample.txt")
    zip_file.write("sample_multiple.csv")

extractall()メソッドについて

extractall()メソッドは、ZIPファイル内のすべてのファイルを指定したフォルダに展開するためのメソッドです。展開先フォルダを指定しない場合、現在のディレクトリに展開されます。


これらの方法を活用すれば、複数ファイルの圧縮や展開が簡単に行えます。ファイル操作の効率化に非常に役立つ機能です。

まとめ

この記事では、Pythonを使ったファイル操作について、ファイルの作成、読み込み、書き込み、CSVファイルの操作、圧縮と展開まで幅広く解説しました。これらの基本操作を理解することで、データ管理や自動化の効率が大きく向上します。必要に応じて実際にコードを書いて試してみてください。

MQL5システムトレーダーの為のPython講座:第19回「組み込み関数について」

タイトルとURLをコピーしました