今回はPythonでも基本となる、テキストファイルの読み込みの方法を説明させていただきます。外部ファイルの利用はよく行われるかと思いますので、ここで覚えていただけたら幸いです!
この記事では
- ファイルの開き方
- ファイルから読み込んだ文字列の扱い方
などを紹介しております。是非最後までお付き合いください。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
Pythonでファイルを開いてテキストを読み込む
open関数の使い方
まずは基本となるファイルの開き方、文字の読み込み方を説明致します。
Pythonでテキストファイルなどを開く場合は、open()関数を使用します。
sample_file.txt
Hello World! I'm Samurai writer!
例えば、このようなsmaple_file.txtを読み込む場合は、以下のように実装します。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") # 読み込んだテキストファイルを1行ずつ表示 for line in file_data: print(line) # 開いたファイルを閉じる file_data.close()
結果:
Hello World! I'm Samurai writer!
ファイルを開く場合は、open()を使用し、引数としてファイルのパスとモードを設定します。第1引数ファイルのパスについては、今回の場合では実行ファイルとテキストファイルを同じディレクトリに置いてある事を前提としています。
もし違うディレクトリにある場合は、ディレクトリを意識したパスを指定する必要があります。
第2引数はモードです。
モードはファイルの読み込み方に種類がある為、指定する必要があります。
open関数のモード一覧
モードの種類は基本として以下になります。
種類 | 特徴 |
---|---|
r | 読み込みモード。ファイルを読み込む際に使用する。モードを指定しない場合はデフォルトでrとなる |
w | 書き込みモード。同名のファイルがある場合、上書きしてしまう。ファイルが存在しない場合に新規作成をする。 |
r+ | 読み書きモード。対象のファイルを読み込み編集する場合に使用する。対象ファイルが無い場合、エラーとなる。 |
w+ | 読み書きモード。r+とほぼ同様だが、対象ファイルが無い場合に新規作成を行う。 |
a | 追記モード。読み込んだファイルの最後に追記する。 |
また、上記のモードに付随して、t, bも使用する事がある為、覚えておきましょう。
種類 | 特徴 |
---|---|
t | テキストモードで読み込み。rt, wtなどの使い方をする。デフォルトではtとなる。 |
b | バイナリモードで読み込み。rb, wbなどの使い方をする。 |
テキストファイルを読み込む場合はt(省略可)ですが、画像などを開く際はbで読み込まないとうまく開けない危険性がある為、要注意です。
今回ではテキストファイルの読み込みに焦点を絞っておりますが、用途によってモードを変える必要がある事は覚えておきましょう。
開いたファイルのテキストを表示する
さて、今度はファイルを読み込んだ後、そこに書かれているテキストの扱いについて説明します。
開いたファイルのテキストを1行ずつ取得する
ここでは、取得したテキストを1行ずつ表示します。
そこで、先ほど紹介した実例を再度ご確認ください。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") # 読み込んだテキストファイルを1行ずつ表示 for line in file_data: print(line) # 開いたファイルを閉じる file_data.close()
このコードでは、読み込んだファイルのテキストを1行ずつ表示するため、for文を使用しています。
for line in file_data: #テキストファイルを1行ずつ変数lineに代入 print(line) #代入したlineを表示
同様の処理として、while文とreadline()を使用した方法もあります。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") # まず1行読み込む line = file_data.readline() # while文を使い、読み込んだ行の表示と次の行の取得を行う while line: # lineが取得できる限り繰り返す print(line) line = file_data.readline() # 開いたファイルを閉じる file_data.close()
結果は先程と同じなので省略致します。これらの処理の特徴は、変数に1行ずつテキストを入れる処理であるため、次の行を入れると前の行のテキストは上書きされてしまう点です。
しかし、実装が複雑になりにくかったり、スムーズな処理ができる点など、長所もあります。なお、for文やwhile文の使い方についても確認したい方は、こちらの記事をご覧ください。
開いたファイルのテキストをまとめて取得する
上記の方法では、1行ずつlineに代入するため、2行目を読み込んだ時には1行目のデータに上書きされてしまいます。
まとめてデータを取得したい場合は、readlines()やread()を使用しましょう。
はじめに、readlines()を紹介します。
readlines()は、テキストを行単位でまとめてリストに取得する事ができるメソッドです。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") #それぞれの行をまとめて取得する lines = file_data.readlines() #取得した行の一覧を表示する print(lines) #表示したい行を指定して表示する print(lines[0]) #開いたファイルを閉じる file_data.close()
実行結果:
['Hello World!n', "I'm Samurai writer!"] Hello World!
各行の開業コードまでをひとまとまりとし、リストに保存している事がわかったかと思います。
もちろんリストとして保存しているので、必要な行だけピックアップする事も可能です!
また、行にこだわらず全てのテキストを取得したい場合は、read()を使用します。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") # テキスト全体をまとめて取得 text = file_data.read() # 取得したテキストを表示 print(text) # 開いたファイルを閉じる file_data.close()
実行結果:
Hello World! I'm Samurai writer!
テキストをそのまま表示している事が分かるかと思います。
読み込んだテキストをまるごと読み込んで、別ファイルに保存したりする場合などに有用です!
ファイル読み込みの応用
基本編ではテキストファイルの開き方、開いたファイルのテキストの読み込み方を紹介しました。
ここでは応用変として、目的別対処法を紹介します!
改行コードを消したい!
readlines()を紹介した際に気づいた方もいらっしゃるかと思いますが、上記で紹介した行の読み込みには改行コードも含まれています(今回の場合ではn)。
これを削除したい場合は、strip()を使用する事で対処できます。
実例は以下になります。
# sample_file.txtファイルを"読み込みモード"で開く file_data = open("sample_file.txt", "r") # まず1行読み込む lines = file_data.readlines() # 1行目から改行コードを削除する lines[0] = lines[0].strip() print(lines) # 開いたファイルを閉じる file_data.close()
['Hello World!', "I'm Samurai writer!"]
ファイルの有無によって処理を変えたい!
もしファイルが存在しなければ処理を変えたいという場合があるかと思います。
その場合は標準ライブラリのosモジュールをインポートする事で使用できるようになるisfile()が役に立ちます。
言葉だけで説明すると難しく思えるのですが、実際は簡単です!
実例を見てみましょう。
import os #osモジュールをインポートする宣言 #ファイルの有無を確認して処理を分ける if os.path.isfile("not_exist.txt"): print("ファイルがあります") else: print("ファイルはありませんでした")
ファイルはありませんでした
ファイルの有無によって処理が分かれていますね。
ポイントは、はじめにosをインポートする事です。これによってosモジュールの様々な機能を使用する事ができるようになります。
複数のファイルを一度に読み込みたい!
例えば、sample_1.txt, sample_2.txt, other.txtという3種類のファイルがあるとします。
この時に”sample_”で始まるテキストの内容を全てまとめて表示する事ができます!その時に使えるのが、globモジュールです。
globでは、ワイルドカードを使う事で複数のファイルをまとめて選択する事ができます。
まずは以下のコードを確認してみましょう。
import glob #globモジュールを宣言 print(glob.glob("sample_*.txt"))
実行結果:
['sample_2.txt', 'sample_1.txt']
sample_1.txt, sample_2.txtがリストにあげられ、other.txtが除外されている事がわかります。
このように、globを使用してワイルドカードを使いファイルを指定すると、該当するファイル名をリストとして取得してくれます。
なお、ここでもglobをインポートする必要があるので注意してください。
これを活用し、該当するファイルの内容をまとめて表示してみましょう。
sample_1.txtの内容:
sample1_line1 sample1_line2 sample1_line3
sample_2.txtの内容:
sample2_line1 sample2_line2 sample2_line3
実行するコード:
#! /usr/bin/env python # -*- coding:utf-8 -*- import glob for file in glob.glob("sample_*.txt"): file_data = open(file, "r") print(file_data.read())
実行結果:
sample2_line1 sample2_line2 sample2_line3 sample1_line1 sample1_line2 sample1_line3
sample_1.txt, sample_2.txtの内容を無事表示する事ができました!
なお、osやglobモジュールについては、こちらの記事を参照していただければ詳しい事がわかります!
まとめ
いかがでしたでしょうか?
今回は、
- pythonでのファイルの開き方
- 開いたファイルのテキストの読み込み方
- 目的別対処法の紹介
を説明させていただきました。ファイルを読み込む機会は多分にあると思いますので、ぜひご活用ください!
なお、今Pythonを学習している方は以下の記事もどうぞ。
はじめてPythonを使う方でもわかりやすいように、Pythonでできることやその学習法などを中心にまとめています。
復習にも使えると思いますので、ぜひ一度ご覧になってみてくださいね。
【Python 入門完全攻略ガイド】