Pythonでテキストファむルを楜々操䜜完党ガむド15遞

Pythonのロゎずテキストファむルを象城するアむコンが䞊んだ画像Python

 

【圓サむトはコヌドのコピペ・商甚利甚OKです】

このサヌビスはASPや、個別のマヌチャント(䌁業)による協力の䞋、運営されおいたす。

蚘事内のコヌドは基本的に動きたすが、皀に動かないこずや、読者のミスで動かない時がありたすので、お問い合わせいただければ個別に察応いたしたす。

この蚘事では、プログラムの基瀎知識を前提に話を進めおいたす。

説明のためのコヌドや、サンプルコヌドもありたすので、もちろん初心者でも理解できるように衚珟しおありたす。

基本的な知識があればカスタムコヌドを䜿っお機胜远加、目的を達成できるように䜜っおありたす。

※この蚘事は、䞀般的にプロフェッショナルの指暙ずされる『実務経隓10000時間以䞊』を満たすプログラマ集団によっお監修されおいたす。

はじめに

皆さんは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はテキスト操䜜が埗意な蚀語なので、自分だけの゚ディタを䜜るなど、高床なテキスト操䜜が可胜です。

この蚘事で玹介したコヌドを参考に、自分のプロゞェクトでテキストファむルの操䜜を詊しおみおください。