Pythonでテキストファイルを開いてデータを読み込む基本中の基本


open

photo credit: loop_oh open 19 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けにフォルダを作成するツールを作りながらPythonプログラミングの基本を学ぶシリーズです。

前回の記事はコチラ。

Pythonで条件分岐をする基本中の基本!if~else文の作り方
初心者向けにフォルダ作成ツールを題材としてPythonプログラミングの基本を学んでいます。今回はPythonで条件式による条件分岐をする基本中の基本、if~else文を使う方法をお伝えします。

条件分岐の基本、if~else文の使い方をお伝えしました。

フォルダを作成するツールとしては、もうだいぶ出来上がってきたのですが、もっと便利にしていきたいと思います。

これまでは作成するフォルダ名を、pyファイル内のリストに直接書き込んでいたのですが、それをテキストファイルなどの別ファイルで与えることができたら便利ですよね。

ということで、今回はPythonでテキストファイルを開いてデータを読み込む方法です。

スポンサーリンク

前回のおさらい

では、前回のおさらいからです。

作成したプログラムはこちらでした。

import os
areas = ['10_アフリカ', '20_アメリカ', '30_アジア', '40_ヨーロッパ', '50_オセアニア']
for area in areas:
    if os.path.exists(area):
        print('フォルダ ' + area + ' は既に存在しています')
    else:
        os.mkdir(area)

作成するフォルダ名をリストで与えて、それぞれについて作業フォルダに同名のフォルダが存在していなければフォルダを作成する、というものでした。

フォルダ名をテキストファイルで与えたい

これはこれでいったんは使える状態になっていると思うのですが、フォルダ名をリストで与える…っていうのが、気になりますよね。

作るフォルダ名を変更したいときに、都度pyファイルを開いてIDLEで編集っていうのは、スマートではないように思えます。

ということで、作成するフォルダ名を別のテキストファイルで与えるということを考えていきたいと思います。

例えば、このようなテキストファイル「area.txt」を用意してみました。

Pythonで開くテキストファイル

テキストファイル内に一行ずつでフォルダ名をシンプルに羅列するようなテキストファイルです。

では、このテキストファイルをPythonで操作する方法を見ていきましょう。

open関数でテキストファイルを開く

Pythonでテキストファイルを読むには、Pythonの組み込み関数の一つであるopen関数を使います。

書き方はこうです。

open(file, mode)

fileには開くテキストファイルのファイル名を絶対パスか相対パスかいずれかで指定します。作業フォルダに目的のファイルがあるのであれば、ファイル名だけでOKです。

modeは読み取り専用なら’r’、書き込み用なら’w’、追加書き込みなら’a’など、アルファベットで指定します。デフォルトは読み取り専用’r’です。

そして、open関数は戻り値としてファイルオブジェクトを返します。

普通はこのファイルオブジェクトを変数にセットしておいて、開いたファイルに対して色々な操作を行うことになります。

ですから、今回の場合は以下のようにすればOKですね。

f = open('area.txt')

これで、「area.txt」が開いて、fという変数にて操作ができるようになりました。

closeメソッドでテキストファイルを閉じる

開いたファイルは、要が済んだら閉じてあげましょう。開いたテキストファイルを閉じるにはcloseメソッドを使います。

ちなみに「メソッド」というのは、オブジェクトに対する操作のことです。今回の例でいうと、ファイルオブジェクトに対して閉じるという操作をするcloseメソッドということですね。

書き方はこうです。

ファイルオブジェクト.close()

ですから、先ほどのopen関数と組み合わせると、以下のようなプログラムとなり、open関数とcloseメソッドの間に開いたファイルへの操作をしていくことになりますね。

f = open('area.txt')
# 処理
f.close()

なお、with文を使うとcloseメソッドなしでファイルを開くことができます。

以下記事で解説をしていますのでご覧ください。

Pythonで開いたファイルのクローズを忘れやすい人のためのwith文の使い方
初心者のためのPythonプログラミングシリーズ、フォルダ作成ツールを作るのを題材に基本中の基本についてお伝えしています。今回はPythonでwith文を使って安全にファイルを開いて閉じる方法です。

開いたテキストファイルの内容を読み込む

開いたテキストファイルの読み込む方法ですが、Pythonではいくつかの方法が用意されています。

  • テキストファイル全体を文字列として読み込むreadメソッド
  • テキストファイルを1行ずつ文字列のリストとして読み込むreadlinesメソッド

それぞれ解説していきましょう。

readメソッドでファイル全体を文字列として読み込む

まず、テキストファイル全体を文字列として読み込む場合ですが、readメソッドを使います。

ファイルオブジェクト.read()

プログラムはコチラです。

f = open('area.txt')
print(f.read())
f.close()

実行してみますと、以下のようにテキストファイルの内容がそのままShellウィンドウに出力されますね。

Pythonのreadメソッドでテキストファイルの内容を出力

readlinesメソッドでテキストファイルを一行ずつ文字列のリストとして読み込む

次は、テキストファイルの内容を一行ずつリストとして格納するreadlinesメソッドです。

ファイルオブジェクト.readlines()

readlinesメソッドを使ったプログラムは以下になります。

f = open('area.txt')
print(f.readlines())
f.close()

では、実行してみましょう。

Pythonのreadlinesメソッドでテキストファイルを読み込んで出力

テキストファイルの内容が一行ずつ、リストとして読み込まれているのがわかりますね。

ただし、改行コード「\n」が含まれているので注意が必要です。

まとめ

以上、Pythonでテキストファイルを読み込む方法についてお伝えしました。

  • テキストファイルを開くopen関数
  • 開いたファイルを閉じるcloseメソッド
  • テキストファイル全体を文字列として読み込むreadメソッド
  • テキストファイルを一行ずつリストとして読み込むreadlinesメソッド

テキストファイル操作の基本ですが、内容盛りだくさんでお送りしました。

さて、次回ですが読み込んだ文字列を分割してフォルダ名を切り出す方法です。

Pythonで文字列を区切り文字や改行で分割してリスト化するsplitメソッドの使い方
初心者向けにPythonプログラミングの基本中の基本をフォルダ作成ツールを作りながら学んでおります。今回は、PythonのSplitメソッドで改行コードで文字列を分割してリストに保存する方法です。

どうぞお楽しみに!

連載目次:【初心者向けPython】基本の基本を学びながらフォルダ操作

非エンジニアの一般ビジネスマンの初心者向けにPythonでWindowsのファイルやフォルダを操作する簡単便利ツールの作り方を解説しながら、Pythonプログラミングの基本中の基本を学んでいくシリーズです。
  1. Pythonで標準ライブラリのモジュールをインポートして使ってみよう
  2. Pythonでosモジュールのmkdir関数を使ってフォルダを作成する超簡単なプログラム
  3. Pythonプログラミングの基本中の基本!forループによる繰り返しの作り方
  4. Pythonでデータをまとめて取り扱う基本中の基本!リストの使い方とforループ
  5. Pythonで指定したフォルダが存在しているかどうかを調べるos.path.existsの使い方
  6. Pythonで条件分岐をする基本中の基本!if~else文の作り方
  7. Pythonでテキストファイルを開いてデータを読み込む基本中の基本
  8. Pythonで文字列を区切り文字や改行で分割してリスト化するsplitメソッドの使い方
  9. Pythonで文字列のスペース・タブ・改行を取り除くstripメソッドの使い方
  10. Pythonで開いたファイルのクローズを忘れやすい人のためのwith文の使い方
  11. Pythonでcsvファイルからデータを読み込む最初の一歩

コメント

  1. tadaken3 より:
    f = open('area.txt')
    print(f.read())
    f.close()
    

    with open('area.txt') as f:
        print(f.read())
    

    のほうが一般的ですよ。

タイトルとURLをコピーしました