「あーあ、今日も100個のテキストファイルを開いて、中身をコピペしてExcelにまとめるのか…。これだけで2時間はかかるよ。Pythonを使えば一瞬だって聞くけど、プログラミングなんて分かんないし…」
実は、Pythonでの「テキストファイルの読み込み」は、みなさんが思っている以上に簡単です。今回はその方法を解説します。
ファイル操作の基本とwith構文の重要性
Pythonでテキストファイルの中身を操作する際は、まず対象となるファイルを開く準備を行います。この処理を担うのが open()です。
そしてファイルを読み書きする際、最もおすすめな安全な方法はwith構文と一緒に使うことです。
安全にファイルを閉じるwith構文の仕組み
図書館から本を借りた場合、読み終わった後は必ず返却手続きを行う必要がありますよね。もし本を借りたまま放置してしまうと、他の利用者がその本を利用できなくなってしまいます。
コンピュータのファイル操作においても同様です。
プログラムがファイルを開いたまま処理を放置してしまうと、OS側でファイルが使用中(ロック状態)となり、ファイルの移動や名前の変更、削除ができなくなる原因となります。
また、メモリやファイルディスクリプタなどのシステムリソースを無駄に占有し続けることにもつながります。
通常であれば最後にclose()を記述してファイルを明示的に閉じる必要がありますが、処理の途中でエラーが発生した場合、close()に到達せずファイルが開いたままになってしまう危険性もあります。
そこでwith構文を使用します。withブロック内の処理が完了した際はもちろん、仮に処理の途中で予期せぬエラーが発生した場合であっても、Pythonが自動的かつ確実にファイルを閉じる処理(リソースの解放)を実行してくれます。
よって、安全なコード設計のためにも、ファイル操作はwith構文を用いて記述することが基本となります。
テキストファイルを一括で読み込む手順
実際のコードで、テキストファイルを安全に読み込む基本の記述例を確認してみましょう。
同一フォルダ内に配置した sample.txt というテキストファイルの内容を読み込み、画面に出力するプログラムになります。
# 読み込み対象のファイル名を指定します
file_path = 'sample.txt'
# 'r' は読み込み専用(Read)モードを意味します
# encoding='utf-8' を明示することで文字コードの差異による文字化けを防ぎます
with open(file_path, 'r', encoding='utf-8') as f:
# read() を使用してファイル全体を1つの文字列として読み込みます
content = f.read()
# 読み込んだ内容を出力します
print(content)
# withブロックを抜けた時点で、ファイルは自動的に安全に閉じられます
文字化けを防ぐエンコーディング指定の重要性
コード内の引数に指定したencoding=’utf-8’は、実務において重要な役割を果たします。
テキストファイルの読み込みで最も頻発するトラブルが「文字化け」や「UnicodeDecodeError」によるプログラムの停止です。
OS環境(特にWindowsなど)では、システムの標準文字コードがShift_JISに設定されている場合があります。一方、Webシステムや現代のテキストエディタで作成されるファイルはUTF-8で保存されることが一般的です。
文字コードの指定を省略してしまうと、OS側のデフォルト設定に依存して読み込みが行われ、日本語の文字が正しく解釈されずに文字化けを引き起こします。
そこでencoding=’utf-8’を明示的に指定しておくことで、環境に左右されず安定した読み込み処理が実現できますので、念のため記述しておきましょう!
ファイルを1行ずつ分割して処理する方法
ファイル全体を一括で読み込むだけでなく、実務では「特定のキーワードが含まれる行だけを抽出したい」「行番号をつけて処理したい」といった要件が頻繁に発生しますよね。
行ごとに切り分けて処理を進めたい場合は、readlines() メソッドを活用します。
with open('sample.txt', 'r', encoding='utf-8') as f:
# readlines() により、各行を要素とするリスト形式で取得します
lines = f.readlines()
for line in lines:
# strip() を使用して行末の不要な改行コードを除去して出力します
print(line.strip())
readlines() を使用すると、ファイル内の各行がリストの要素として格納されるため、条件分岐や繰り返し処理を組み合わせて必要なデータのみを選別することが簡単になります。
ちなみに、テキストファイルの容量が非常に大きい(数万行から数十万行規模)場合は、readlines() で一度に全行を展開する代わりに、「for line in f:」のようにファイルオブジェクト自体を直接ループ処理することで、使用メモリを最小限に抑えながら高速に処理することができます。
まとめ
テキストファイルの読み込みは、Pythonによる業務自動化における基本的かつ応用範囲の広い技術となります。
- ファイルを開く際はwith構文を併用し、リソースの自動解放を行う
- 文字化けや読み込みエラーを防ぐため、必ずencoding=’utf-8’を明記する
- 用途に応じてread()による一括取得と、readlines()やループ処理による行単位取得を使い分ける
この3つのポイントを押さえることで、日々の煩雑な手作業を自動処理へ置き換えることが可能になります。まずは身近な1つのテキストファイルから、自動化の第一歩を進めてみてください!
Pythonの本は種類が多すぎて、業務効率化に使えるのか見分けるのが大変ですよね。実務自動化に5年以上携わってきた私が、「デスクワークの自動化に即戦力になった本」を厳選して紹介します。失敗しない1冊を見つけたい方は、ぜひ参考にしてみてください。

コメント