スライドショー

Pythonでファイルの読み込み方法をマスター|open関数

今回はPythonでも基本となる、テキストファイルの読み込みの方法を説明させていただきます。外部ファイルの利用はよく行われるかと思いますので、ここで覚えていただけたら幸いです!

この記事では

  • ファイルの開き方
  • ファイルから読み込んだ文字列の扱い方


などを紹介しております。是非最後までお付き合いください。

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

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文の使い方についても確認したい方は、こちらの記事をご覧ください。


【初心者必見】Pythonのwhile文の特徴や使い方を徹底解説!
更新日 : 2018年10月24日

開いたファイルのテキストをまとめて取得する

上記の方法では、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入門】ファイル/フォルダを操作する方法|os・glob
更新日 : 2019年4月30日

まとめ

いかがでしたでしょうか?

今回は、

  • pythonでのファイルの開き方
  • 開いたファイルのテキストの読み込み方
  • 目的別対処法の紹介

を説明させていただきました。ファイルを読み込む機会は多分にあると思いますので、ぜひご活用ください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

遠藤貴大

遠藤貴大

1991年生まれ。双子座。
理系大学で認証システムを学んだ後、アプリ開発者となる。
新しく学ぶ人に寄り添った記事を心がけて執筆します。
芸術が好き。いつか猫と暮らすのが夢。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説