pythonを使って1行ずつテキストファイルを取得する方法
1. はじめに
pythonを使用してテキスト解析をするケースは多くある。例えば、ログを成形するといったケースである。今回は、pythonを使用して、テキストファイルから文字列を1行ずつ取得するプログラムを作成する。
2. 前提条件
筆者の環境を下記に示す。
OS: Windows 11
開発環境: Visual Studio Code
プログラミング言語:python 3.11.9
3. 作成手順
3.1 お題
下記に、今回のお題を示す。
・format.txtというファイルを読み込み、画面上に1行ずつ表示するプログラムを作成せよ。
3,1 mainプログラム
まず、画面に「Hello World」と表示するひな型のmainプログラムを作成する。
def main():
print("Hello World")
if __name__ == "__main__":
main()
実行すると、Hello Worldと示することがわかる。
3.2 ファイル読み込み
pythonでは、ファイルを読み込む関数が、open関数を使用する。
open(ファイル名, モード, エンコーディング)
#ファイル名:絶対パスとファイル名
#モード:r(読み込み)
#エンコーディング: encoding = utf-8(今回はUTF8として読み込む)
open関数は、ファイル名、モード、エンコーディングを引数としてファイルを開くことができる。今回は、utf8のformat.txtを開くため、下記のように記述する。
open(passname/format.txt, 'r', encoding = 'utf-8')
また、as構文を使用することで、読み込んだ文字列を変数に代入することができる。これをwith構文と一緒に使う。
open(passname/format.txt, 'r', encoding = 'utf-8') as file:
with構文は、ブロック内から外れると、リソースを解放などを行ってくれる。よって、ファイルクローズなどの解放処理のことは考えなくてよい。
def main():
filename = "C:/passname/format.txt"
with open(filename, 'r', encoding='utf-8') as file:
print(file)
if __name__ == "__main__":
main()
3.3 取得したデータを繰り返す
ファイルから取得したテキストを繰り返して表示する。
def main():
filename = "C:/passname/format.txt"
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
print(line)
if __name__ == "__main__":
main()
ただし、取得した結果を表示すると、次のように謎の改行が入っていることがわかった。
AAAAの後に、改行が入っていることがわかるだろう。これは、print文による改行が入ってしまっているためである。そこで、stripメソッドを使用して不要な改行を取り除く。
def main():
filename = "C:/passname/format.txt"
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
print(line.strip())
if __name__ == "__main__":
main()
stripメソッドは、先頭と末尾の改行を取り除く機能を持っている。これによって、不要な末尾の改行がなくなり、正しく表示できる。
3.4 エラー処理
ファイルを扱うため、念のためエラー処理を記述する。try-exeptionを使用して、ファイルに関するエラーを検出する。
def main():
filename = "C:/passname/format.txt"
try:
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
print(line.strip())
except Exception as e:
print("ファイルに関するエラーが発生しました")
if __name__ == "__main__":
main()
なお、実行結果に変わりわない。
3.5 関数化する
再利用性も考えて、1行ずつ読み込む処理を関数化する。pythonでは、def 関数名とすることで、自作の関数を作成することができる。
def 関数名
#処理
最終的なプログラムは次のようになる。
def main():
filename = "C:/passname/format.txt"
#ファイルを読み込む
ReadLine(filename)
def ReadLine(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
print(line.strip())
except Exception as e:
print("ファイルに関するエラーが発生しました")
if __name__ == "__main__":
main()
4. おわりに
今回は、pythonを使用して、ファイルから1行ずつ文字列を取得するプログラムを作成した。