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行ずつ文字列を取得するプログラムを作成した。


いいなと思ったら応援しよう!