Pythonでテキストファイル(メモ帳)を1行毎に読み込む&書き込む 方法

2021年6月20日

こんにちは、せつやです。

今回は、Pythonでメモ帳で作成したテキストファイルを1行ずつ読み込んだり
書き込んだりする方法をご紹介します。

Python メモ帳の読み書きを行うサンプル画像

ロードを押すと、メモ帳のデータをテキストボックスに読込みます。
セーブを押すと、テキストボックスの内容をメモ帳に書込みます。
クリアを押すと、テキストボックスの内容を初期化します。

こんな感じのが作れるよ!コピーして使ってね💡

テキストデータ(メモ帳)を1行ずつ全部 読み込むコード

def 読込処理():
    textlist = []
    txtfile = './MEMO.txt'

    with open(txtfile, 'r', encoding='UTF-8') as f:
        textlist = f.read().split("\n")

    window["input1"].update(textlist[0])
    window["input2"].update(textlist[1])
    window["input3"].update(textlist[2])

解説付きコード

def 読込処理():
    # 読み込み先の配列を用意
    textlist = []

    # (1) 読み込みたいテキストファイルを指定
    txtfile = './MEMO.txt'

    # (2) テキストファイルを1行ずつ配列に格納
    with open(txtfile, 'r', encoding='UTF-8') as f:
        textlist = f.read().split("\n")

    # 配列に格納したテキストデータをテキストボックスにロード
    window["input1"].update(textlist[0])
    window["input2"].update(textlist[1])
    window["input3"].update(textlist[2])
(1) 読み込みたいテキストファイルを指定
txtfile = './MEMO.txt'

読み込みたいテキストファイルを指定します。
ファイルはフルパス、相対パスのどちらの指定も可能です。
また、実行ファイルと同じフォルダにテキストファイルがある場合は
ファイル名だけでも読み込めます。

(2) テキストファイルを1行ずつ配列に格納
with open(txtfile, 'r', encoding='UTF-8') as f:
    textlist = f.read().split("\n")

指定したテキストファイルの中身を1行ずつ配列に格納しています。
encoding=’UTF-8′ の部分は、テキストデータの形式に合わせて変更しましょう。
split(“\n")の部分では、改行毎に配列にデータを区切っています。

テキストデータ(メモ帳)に1行ずつ 書き込むコード

def 書込処理():
    textlist = []
    txtfile = './MEMO.txt'

    textlist.append(values['input1'])
    textlist.append(values['input2'])
    textlist.append(values['input3'])

    f = open(txtfile, 'w', encoding='UTF-8')
    
    for text in textlist:
        f.write(text+"\n")

    f.close

解説付きコード

def 書込処理():
    # (1) 書込み先の配列を用意
    textlist = []

    # 書き込みたいテキストファイルを指定
    txtfile = './MEMO.txt'

    # 配列にテキストボックスの内容を格納
    textlist.append(values['input1'])
    textlist.append(values['input2'])
    textlist.append(values['input3'])

    # (2) 書込みたいファイルをオープン
    f = open(txtfile, 'w', encoding='UTF-8')
    
    # (3) 配列の全データを1個ずつ改行してテキストファイルに書き込む
    for text in textlist:
        f.write(text+"\n")

    # 書き込み終わったファイルをクローズ
    f.close
(1) 書き込みたいテキストファイルを指定
txtfile = './MEMO.txt'

書き込みたいテキストファイルを指定します。
ファイルは絶対パス、相対パスのどちらの指定も可能です。
また、実行ファイルと同じフォルダにテキストファイルがある場合は
ファイル名だけでも読み込めます。

(2) 書込みたいファイルをオープン
f = open(txtfile, 'w', encoding='UTF-8')

必ず、書き込みを開始する前に、書込みファイルをオープンする必要があります。
書き込み後のファイル形式は省略できますが、予期せぬエラーを招くためなるべく
指定しておきましょう。
また、’w'を指定することで、まっさらな状態か上書き保存を行えます。

(3) 配列の全データを1個ずつ改行してテキストファイルに書き込む
for text in textlist:
    f.write(text+"\n")

配列に格納されている、データ個数分ループして
そのたびに、ファイルに改行しながら書込みを行います。
text の部分は、任意の文字列を指定可能です。

Pythonでそのまま使えるサンプルコード

# coding: utf-8
# *************************************************************************************
# * テキストファイルを1行毎に読み込む&書き込む
# *************************************************************************************
# *====================================================================================
# * インポートライブラリ
# *====================================================================================
# +-----------------------------------------------------------------------------------+
# + PySimpleGUI
# +-----------------------------------------------------------------------------------+
#(pip install pysimplegui)
import PySimpleGUI as sg

# +-----------------------------------------------------------------------------------+
# + PyAutoGUI
# +-----------------------------------------------------------------------------------+
#(pip install pyautogui)
import pyautogui as pg

# *====================================================================================
# * 実行プログラム
# *====================================================================================
def 初期処理():
    window["input1"].update("")
    window["input2"].update("")
    window["input3"].update("")
    
def 読込処理():
    textlist = []
    txtfile = './MEMO.txt'

    with open(txtfile, 'r', encoding='UTF-8') as f:
        textlist = f.read().split("\n")

    window["input1"].update(textlist[0])
    window["input2"].update(textlist[1])
    window["input3"].update(textlist[2])

def 書込処理():
    textlist = []
    txtfile = './MEMO.txt'

    textlist.append(values['input1'])
    textlist.append(values['input2'])
    textlist.append(values['input3'])

    f = open(txtfile, 'w', encoding='UTF-8')
    
    for text in textlist:
        f.write(text+"\n")

    f.close

# *====================================================================================
# * GUI作成
# *====================================================================================
# +-----------------------------------------------------------------------------------+
# + スタイル設定
# +-----------------------------------------------------------------------------------+
sg.theme('Dark Blue 3')

# +-----------------------------------------------------------------------------------+
# + レイアウト設定
# +-----------------------------------------------------------------------------------+
layout = [
           # テキストラベル1
           [ sg.Text('テキスト1行目',
                     pad=((0,0),(5,0)),
                     font=('BIZ UDゴシック',10),
                     text_color=("#FFFFFF"))],

           # 入力ボックス1
           [ sg.InputText("",
                     font=('BIZ UDゴシック',10),
                     pad=((0,0),(0,5)),
                     size=(50,0),
                     key='input1')],

           # テキストラベル2
           [ sg.Text('テキスト2行目',
                     pad=((0,0),(5,0)),
                     font=('BIZ UDゴシック',10),
                     text_color=("#FFFFFF"))],

           # 入力ボックス2
           [ sg.InputText("",
                     font=('BIZ UDゴシック',10),
                     pad=((0,0),(0,5)),
                     size=(50,0),
                     key='input2')],

           # テキストラベル3
           [ sg.Text('テキスト3行目',
                     pad=((0,0),(5,0)),
                     font=('BIZ UDゴシック',10),
                     text_color=("#FFFFFF"))],

           # 入力ボックス3
           [ sg.InputText("",
                     font=('BIZ UDゴシック',10),
                     pad=((0,0),(0,5)),
                     size=(50,0),
                     key='input3')],

           # ボタン - クリア
           [ sg.Submit(button_text='クリア',
                      pad=((15,3),(10,0)),
                      font=('BIZ UDゴシック',10),
                      size=(14,1),
                      key='button1'),

           # ボタン - ロード
              sg.Submit(button_text='ロード',
                      pad=((0,3),(10,0)),
                      font=('BIZ UDゴシック',10),
                      size=(14,1),
                      key='button2'),
             
           # ボタン - セーブ
              sg.Submit(button_text='セーブ',
                      pad=((0,0),(10,0)),
                      font=('BIZ UDゴシック',10),
                      size=(14,1),
                      key='button3'),
            ]
         ]

# +-----------------------------------------------------------------------------------+
# + ウィンドウ作成
# +-----------------------------------------------------------------------------------+
window = sg.Window('テキストファイルの読み書き',layout,size=(375,180))

# +-----------------------------------------------------------------------------------+
# + GUIループ
# +-----------------------------------------------------------------------------------+
while True:
    event, values = window.read()

    if event is None:
        break

    if event == "button1":
        初期処理()

    if event == "button2":
        読込処理()

    if event == "button3":
        書込処理()
Point

今回は、読み込んだテキストファイル(メモ帳)をテキストボックスに反映させたり
テキストボックスの内容をテキストファイル(メモ帳)に書き込んだりをしましたが
読み込んだデータを別の関数やメッセージなどに活用するなど、応用をしてみましょう。

Pythonをまとめて学びたい方は、まずは無料オンラインセミナーがおすすめ