Pythonでテキストファイル(メモ帳)を1行毎に読み込む&書き込む 方法
こんにちは、せつやです。
今回は、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])
txtfile = './MEMO.txt'
読み込みたいテキストファイルを指定します。
ファイルはフルパス、相対パスのどちらの指定も可能です。
また、実行ファイルと同じフォルダにテキストファイルがある場合は
ファイル名だけでも読み込めます。
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
txtfile = './MEMO.txt'
書き込みたいテキストファイルを指定します。
ファイルは絶対パス、相対パスのどちらの指定も可能です。
また、実行ファイルと同じフォルダにテキストファイルがある場合は
ファイル名だけでも読み込めます。
f = open(txtfile, 'w', encoding='UTF-8')
必ず、書き込みを開始する前に、書込みファイルをオープンする必要があります。
書き込み後のファイル形式は省略できますが、予期せぬエラーを招くためなるべく
指定しておきましょう。
また、’w'を指定することで、まっさらな状態か上書き保存を行えます。
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":
書込処理()
今回は、読み込んだテキストファイル(メモ帳)をテキストボックスに反映させたり
テキストボックスの内容をテキストファイル(メモ帳)に書き込んだりをしましたが
読み込んだデータを別の関数やメッセージなどに活用するなど、応用をしてみましょう。
ディスカッション
コメント一覧
まだ、コメントがありません