Pythonでテキストファイルを楽々操作!完全ガイド15選 – Japanシーモア

Pythonでテキストファイルを楽々操作!完全ガイド15選

Pythonのロゴとテキストファイルを象徴するアイコンが並んだ画像Python
この記事は約21分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

皆さんはPythonというプログラミング言語をご存知でしょうか。

現在、データ分析やウェブ開発など多岐にわたる分野で活用されています。

その中でも、テキストファイルの読み書きは非常に基本的な操作であり、Pythonの特長を活かした快適なコーディングが可能です。

今回の記事では、Pythonを使ったテキストファイルの読み書き方法について、初心者の方でも理解しやすいように具体的なサンプルコードと共に解説します。

手を動かしながら学べるので、ぜひ実際に試してみてください。

●Pythonとは

Pythonは、シンプルで読みやすいコードが特徴のプログラミング言語です。

初心者でも取り組みやすいと評価され、教育現場や自習用の教材でも頻繁に採用されています。

○Pythonの特徴

Pythonの最大の特徴はその読みやすさとシンプルさです。

Pythonは、人間が理解しやすいコードを書くことを重視して設計されています。

そのため、他の言語と比較してコードが分かりやすく、初心者でもすぐに始められます。

さらに、Pythonは豊富なライブラリを持っています。

これらのライブラリは、特定の問題を解決するために既に作成されたプログラムの集合体で、それらを利用することで煩雑な作業を簡単に処理できます。

例えば、データ解析用のライブラリであるPandas、科学計算用のライブラリであるNumpyなどがあります。

●Pythonにおけるテキストファイルの読み書き

テキストファイルの読み書きは、Pythonプログラミングにおける基本的なスキルです。

それは、テキストファイルを使ってデータを永続化(保存)したり、他のプログラムとデータを交換したりするためです。

○テキストファイルとは

テキストファイルは、文字列のみを格納するためのファイルです。人間が直接読むことができ、テキストエディタで編集することが可能です。

一方、Pythonプログラムからも簡単に読み書きすることができます。

○Pythonでのテキストファイルの扱い方

Pythonでは、組み込み関数のopenを使用してテキストファイルを開きます。

開いたファイルは、読み取り専用モード(’r’)または書き込み専用モード(’w’)など、さまざまなモードで操作することができます。

また、読み取り専用モードで開いたファイルは、readメソッドを使用して内容を読み取ることができます。

書き込み専用モードで開いたファイルには、writeメソッドを使用してデータを書き込むことができます。

●Pythonを使ったテキストファイルの読み込み方法

テキストファイルの読み込みは、Pythonの基本的な操作の一つです。

様々な情報がテキストファイルとして保存されていることが多いため、テキストファイルの読み込み方法を習得することで、さまざまなデータを取り扱うことが可能となります。

Pythonのテキストファイルの読み込みには、標準ライブラリの一つである「open」関数を使用します。

○サンプルコード1:テキストファイルを読み込む

下記のコードは、テキストファイルを読み込むための基本的なコードです。

この例では、’sample.txt’という名前のテキストファイルを読み込んでいます。

具体的には、’r’のモードで開き、中身を表示します。

# テキストファイルを読み込むコード
with open('sample.txt', 'r') as f:
    print(f.read())

このコードを実行すると、’sample.txt’の中身が全て表示されます。

ファイルのパスを指定していない場合、コードが実行されたディレクトリ内の’file.txt’を探します。

なお、’r’は読み込みモードを表します。

○サンプルコード2:テキストファイルを行ごとに読み込む

次に、テキストファイルを行ごとに読み込む方法を見てみましょう。

‘readlines’関数を使うと、ファイルを行ごとに読み込むことができます。

# テキストファイルを行ごとに読み込むコード
with open('sample.txt', 'r') as f:
    lines = f.readlines()
for line in lines:
    print(line)

上記のコードを実行すると、’sample.txt’の中身が行ごとに表示されます。

この方法は、特定の行に特定の情報があるというような、行を単位とした情報の取り扱いに便利です。

○サンプルコード3:テキストファイルから特定の行だけを読み込む

テキストファイルから特定の行だけを読み込むことも可能です。

次の例では、’readlines’関数でファイルの各行を読み込んだ後、リストのインデックスを指定して特定の行を取り出しています。

# テキストファイルから特定の行だけを読み込むコード
with open('sample.txt', 'r') as f:
    lines = f.readlines()
print(lines[2])  # 3行目を出力

このコードを実行すると、’sample.txt’の3行目の内容が表示されます。

リストのインデックスは0から始まるため、3行目を取り出すには’lines[2]’となります。

●Pythonを使ったテキストファイルの書き込み方法

テキストファイルの読み込みについて説明しましたが、今度はその逆、テキストファイルに情報を書き込む方法を見ていきましょう。

Pythonを使用すれば、テキストファイルの作成から内容の書き込み、保存まで、シンプルに実装できます。

○サンプルコード4:テキストファイルに書き込む

このコードでは、Pythonを用いて新たにテキストファイルを作成し、その中に任意の文字列を書き込む方法を紹介します。

この例では、’Hello, World!’という文字列を書き込んでいます。

# ファイルを書き込みモードで開く
with open('example.txt', 'w') as f:
    # 文字列を書き込む
    f.write('Hello, World!')

上記のサンプルコードを実行すると、カレントディレクトリに’example.txt’という名前のテキストファイルが作成され、その中に’Hello, World!’という文字列が書き込まれます。

書き込みモード(’w’)でファイルを開くと、既存のファイル内容は消去されて新たな内容が書き込まれます。

すでにあるファイルの内容を保持しながら追加したい場合には、追記モードを使用します。

○サンプルコード5:テキストファイルに行を追加する

次に、テキストファイルの既存の内容を保持したまま新たな行を追加する方法を見ていきます。

この操作を行うには、追記モード(’a’)を用います。

# ファイルを追記モードで開く
with open('example.txt', 'a') as f:
    # 新たな行を追加
    f.write('\nHello, Python!')

上記のコードを実行すると、’example.txt’の末尾に新たな行が追加され、そこに’Hello, Python!’という文字列が書き込まれます。

すでに存在するテキストに追記を行う際には、この方法が適しています。

○サンプルコード6:テキストファイルの特定の位置に書き込む

しかし、テキストファイルの先頭や中間に情報を挿入したい場合にはどうすればよいのでしょうか。

Pythonではファイルの読み書き位置をシーク(seek)することで、任意の場所から書き込みを開始できます。

次のサンプルコードでは、テキストファイルの先頭に新たな行を挿入します。

# ファイルを読み書きモードで開く
with open('example.txt', 'r+') as f:
    # ファイル内容を保存
    content = f.read()
    # シーク位置をファイルの先頭に移動
    f.seek(0)
    # 新たな行を挿入
    f.write('Hello, Seek!\n' + content)

このコードを実行すると、’example.txt’の先頭に’Hello, Seek!’という新たな行が挿入されます。

ファイルを読み書きモード(’r+’)で開くと、ファイルの読み込みと書き込みが可能になります。

まずファイルの内容全体を読み込み、その後シーク(seek)で書き込み位置を先頭に移動します。

最後に新たな行と元の内容を結合して書き込みます。

●テキストファイルの操作をより便利にするライブラリ

Pythonは、テキストファイルの操作を簡易化するための強力なライブラリを持っています。

その中でも「csv」と「json」は、特によく利用されます。これらのライブラリを使うことで、テキストファイルの読み書きが格段に容易になります。

○サンプルコード7:CSVファイルの読み書き(csvライブラリ)

Pythonの標準ライブラリであるcsvライブラリは、CSV形式のテキストファイルの読み書きをサポートします。

このライブラリを使用すると、一行一行のテキストデータをリストとして扱うことができます。

import csv

# CSVファイルの書き込み
with open('test.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['apple', 'orange', 'grape'])
    writer.writerow(['dog', 'cat', 'mouse'])

# CSVファイルの読み込み
with open('test.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

このコードでは、まずcsvライブラリをインポートします。

その後、’test.csv’という名前のCSVファイルを書き込むために開きます。

csv.writer()関数は、指定したファイルオブジェクトに対するライターオブジェクトを生成します。

writerow()メソッドを用いてリスト形式のデータをCSVファイルに書き込んでいます。

ここではフルーツの名前と動物の名前が書き込まれています。その後、同じファイルを読み込んで内容を出力します。

出力結果は下記の通りです。

['apple', 'orange', 'grape']
['dog', 'cat', 'mouse']

○サンプルコード8:JSONファイルの読み書き(jsonライブラリ)

jsonライブラリは、JSON形式のデータの読み書きを可能にします。

JSONはJavaScript Object Notationの略で、データ交換のための軽量なフォーマットです。

Pythonの辞書型と非常に相性が良く、キーと値のペアでデータを表現することができます。

import json

# JSONファイルの書き込み
data = {
    'name': 'John',
    'age': 30,
    'city': 'New York'
}

with open('data.json', 'w') as f:
    json.dump(data, f)

# JSONファイルの読み込み
with open('data.json', 'r') as f:
    data = json.load(f)
    print(data)

このコードではjsonライブラリを使って、Pythonの辞書型のデータをJSONファイルに書き込み、その後同じファイルを読み込んでいます。

json.dump()関数は、Pythonの辞書型のデータをJSON形式の文字列に変換し、ファイルに書き込むことができます。

対象となるファイルは書き込みモード(‘w’)で開きます。

json.load()関数は、JSONファイルを読み込んでPythonの辞書型のデータに変換します。出力結果は下記の通りです。

{'name': 'John', 'age': 30, 'city': 'New York'}

これらのライブラリを使うことで、テキストファイルをはじめとする様々な形式のファイル操作が容易になります。

●注意点と対処法

Pythonでテキストファイルを操作する際には、特定の注意点があります。

その一つが「ファイルのオープンモード」です。ファイルを操作する際には、適切なオープンモードを選択することが重要です。

オープンモードは主に「読み取り専用」「書き込み専用」「追記モード」などがあり、それぞれ’r’、’w’、’a’という文字列で指定します。

例えば、「w」モードでは、既存のファイルを開くと内容がすぐにクリアされ、新しい内容を書き込むための空のファイルが作成されます。

そのため、元のデータを保持したい場合には注意が必要です。一方、「r」モードでは、ファイルを読み取ることしかできません。

そのため、ファイルに書き込みたい場合にはこのモードを使用することはできません。

それでは実際の例を見てみましょう。

次のサンプルコードでは、Pythonでテキストファイルをオープンし、その内容を表示しています。

このコードでは’r’モードを使ってファイルを読み取ります。

# ファイルを読み取り専用モードで開く
with open('sample.txt', 'r') as f:
    print(f.read())  # ファイルの内容を表示

このコードを実行すると、指定したテキストファイル(ここでは’sample.txt’)の内容が表示されます。

また、テキストファイルを操作する際にはエンコーディングにも注意が必要です。

PythonではデフォルトでUTF-8のエンコーディングを使用しますが、テキストファイルのエンコーディングが異なる場合には適切に指定する必要があります。

次のサンプルコードでは、Shift_JISエンコードのテキストファイルを開き、その内容を表示しています。

このコードでは’encoding’パラメータに適切なエンコーディングを指定しています。

# Shift_JISエンコードのファイルを開く
with open('sample_sjis.txt', 'r', encoding='shift_jis') as f:
    print(f.read())  # ファイルの内容を表示

このコードを実行すると、指定したShift_JISエンコードのテキストファイル(ここでは’sample_sjis.txt’)の内容が表示されます。

これらの注意点を把握し、適切な対処をすることで、Pythonでのテキストファイルの操作がスムーズに行えます。

●応用例

Pythonでテキストファイルを操作することの便利さは、大量のテキストデータを一括で処理する際に特に顕著です。

それでは、大量のテキストデータを一括で読み込み、特定の文字列を含む行のみを出力するサンプルコードを紹介します。

○サンプルコード9:大量のテキストデータを一括で処理する

def extract_lines(filename, keyword):
    # 指定したキーワードを含む行を抽出する関数
    with open(filename, 'r') as f:
        for line in f:
            if keyword in line:
                print(line)

# 使用例
extract_lines('large_data.txt', 'Python')

このコードでは、大量のテキストデータ(ここでは’large_data.txt’)から指定したキーワード(ここでは’Python’)を含む行を抽出し、それらを表示します。

このように、Pythonでは大量のテキストデータも容易に扱うことができます。

また、ログファイルの自動解析もPythonで簡単に行えます。

それでは、ログファイルからエラーログのみを抽出するサンプルコードを紹介します。

○サンプルコード10:ログファイルの自動解析

def extract_error_logs(filename):
    # エラーログを抽出する関数
    with open(filename, 'r') as f:
        for line in f:
            if 'ERROR' in line:
                print(line)

# 使用例
extract_error_logs('application.log')

このコードでは、アプリケーションのログファイル(ここでは’application.log’)から’ERROR’という文字列を含む行(エラーログ)を抽出し、それらを表示します。

このようなログファイルの自動解析は、システムの運用・管理において非常に有用です。

○サンプルコード11:テキストデータの自動整形

Pythonを使うと、大量のテキストデータを自動で整形することが可能です。

具体的なコードを見ていきましょう。

# Python3
def format_text(file_name):
    with open(file_name, 'r') as f:
        lines = f.readlines()

    formatted_lines = []
    for line in lines:
        # 先頭と末尾の空白を削除
        line = line.strip()
        # 文字列の先頭を大文字に変換
        line = line.capitalize()
        formatted_lines.append(line)

    with open(file_name, 'w') as f:
        for line in formatted_lines:
            f.write(line + "\n")

format_text('sample.txt')

このコードでは、指定したテキストファイルを開き、全ての行を読み込んでいます。

次に各行に対して文字列の先頭と末尾の空白を削除し、先頭を大文字に変換します。

最後に整形した行をテキストファイルに書き戻しています。

このコードを実行した後のファイルを開くと、全ての行が整形されていることが確認できます。

具体的には、各行の先頭と末尾の空白が削除され、行の先頭の文字が大文字に変換されています。

Pythonでのテキストデータの自動整形は、このようにシンプルなコードで実現することが可能です。

初心者でもすぐにでも手を動かして試してみてください。

○サンプルコード12:マークダウンファイルの自動生成

Pythonでは、マークダウンファイルの自動生成も可能です。

# Python3
def create_md(file_name, headers, contents):
    with open(file_name, 'w') as f:
        for i in range(len(headers)):
            f.write("# " + headers[i] + "\n")
            f.write(contents[i] + "\n\n")

headers = ["Introduction", "Chapter1", "Chapter2"]
contents = ["This is the introduction.", "This is the first chapter.", "This is the second chapter."]
create_md('sample.md', headers, contents)

このコードでは、マークダウンファイルを新規作成し、ヘッダーとその内容を書き込んでいます。

ヘッダーは’#’で始まる行として、それぞれの内容は改行を挟んで記述されます。

コードを実行すると、指定したファイル名のマークダウンファイルが生成され、その中にヘッダーと内容が記述されます。

生成したマークダウンファイルを開くと、自動生成されたヘッダーとその内容を確認することができます。

○サンプルコード13:設定ファイルの自動生成と読み込み

Pythonでは、設定ファイルを自動生成し、それを読み込むことも可能です。

具体的なコードを見ていきましょう。

# Python3
import json

def create_config(file_name, settings):
    with open(file_name, 'w') as f:
        json.dump(settings, f, indent=4)

def load_config(file_name):
    with open(file_name, 'r') as f:
        settings = json.load(f)
    return settings

settings = {
    "font_size": 12,
    "font_family": "Times New Roman",
    "width": 800,
    "height": 600
}

create_config('config.json', settings)

loaded_settings = load_config('config.json')
print(loaded_settings)

このコードでは、最初に設定ファイル(JSON形式)を自動生成しています。

設定は辞書形式で管理し、それをJSONファイルに書き出すことで設定ファイルを生成しています。

次に、この設定ファイルを読み込んでいます。

JSONファイルから辞書形式の設定を読み込むことで、設定を利用できるようになります。

このコードを実行すると、まず指定した設定で’config.json’という設定ファイルが生成されます。その後、この設定ファイルを読み込み、その内容を出力します。

出力結果は、最初に設定した辞書と同じ内容になります。

これにより、設定ファイルを自動生成し、それを正しく読み込むことができたことが確認できます。

Pythonで設定ファイルを自動生成し、読み込む方法は、多くのアプリケーション開発において役立ちます。

●カスタマイズ方法

Pythonでのテキスト操作は、高度なカスタマイズが可能です。

詳細なカスタマイズの方法を3つ紹介していきます。

○サンプルコード14:自分だけのテキストエディタを作る

テキスト操作が得意なPythonを使って、自分だけのテキストエディタを作ってみましょう。

# Python3
class TextEditor:
    def __init__(self, file_name):
        self.file_name = file_name

    def read(self):
        with open(self.file_name, 'r') as f:
            print(f.read())

    def write(self, text):
        with open(self.file_name, 'w') as f:
            f.write(text)

editor = TextEditor('sample.txt')
editor.write('Hello, Python!')
editor.read()

このコードでは、テキストエディタをクラスとして実装しています。

クラスにはreadメソッドとwriteメソッドがあり、それぞれファイルの読み込みと書き込みを行います。

インスタンスを生成する際に、操作するファイル名を指定します。

そして、writeメソッドでテキストを書き込み、readメソッドで内容を読み込んで表示します。

このコードを実行すると、まず’Hello, Python!’というテキストが’example.txt’に書き込まれ、その後、同じファイルからテキストが読み込まれて出力されます。

出力結果は’Hello, Python!’となります。

この例では基本的な機能のみを実装しましたが、Pythonの強力なテキスト操作機能を使えば、さらに高機能なテキストエディタを作ることができます。

○サンプルコード15:自分だけのCSVエディタを作る

Pythonにはcsvモジュールという、CSVファイルを簡単に扱うことができるモジュールがあります。

この機能を使って、自分だけのCSVエディタを作ってみましょう。

# Python3
import csv

class CSVEeditor:
    def __init__(self, file_name):
        self.file_name = file_name

    def read(self):
        with open(self.file_name, 'r') as f:
            reader = csv.reader(f)
            for row in reader:
                print(row)

    def write(self, data):
        with open(self.file_name, 'w', newline='') as f:
            writer = csv.writer(f)
            writer.writerows(data)

data = [['Name', 'Age'], ['Alice', '20'], ['Bob', '30']]
editor = CSVEeditor('sample.csv')
editor.write(data)
editor.read()

このコードでは、CSVエディタをクラスとして実装しています。

このクラスにもreadメソッドとwriteメソッドがあり、それぞれCSVファイルの読み込みと書き込みを行います。

writeメソッドで2次元リストをCSVファイルに書き込み、readメソッドでCSVファイルを読み込んで各行を出力します。

このコードを実行すると、まず2次元リストが’example.csv’に書き込まれ、その後、同じファイルからデータが読み込まれて出力されます。

出力結果は最初に設定した2次元リストと同じ内容となります。

Pythonのcsvモジュールを使えば、このように簡単に自分だけのCSVエディタを作ることができます。

CSVファイルの操作が必要な場面でぜひ活用してみてください。

まとめ

Pythonを使ってテキストファイルやCSVファイルを扱う方法について学びました。

Pythonはテキスト操作が得意な言語なので、自分だけのエディタを作るなど、高度なテキスト操作が可能です。

この記事で紹介したコードを参考に、自分のプロジェクトでテキストファイルの操作を試してみてください。