9章では、「input」を使ってプログラムの外から値を入力しましたね。この章では、「テキストファイル」からのデータの読み込みについて解説したいと思います。(次章では「csvファイル」の読み込みについて解説します。)
1.テキストファイルやcsvファイルって何?
さて、データの読み込みを解説する前に、「テキストファイル」や「csvファイル」が何かということを少し解説したいと思います。簡単にいうと、以下のようなものです。
- 「テキストファイル」とは、メモ帳などで作ったファイル
- 「csvファイル」とは、エクセルで作り、csv形式で保存したもの
そして、これらを分ける方法は、「拡張子」を見ればわかります。
え?「拡張子」って何?と思われた方もいらっしゃると思うので、簡単に解説すると、「ファイルの形を表しているもの」で、「ファイル名.〇←ここのこと」です。
ただし、この拡張子はデフォルトでは表示されないようになっていますので、下の手順で表示できるようにしてください。
- 左上にある、「整理」から「フォルダーと検索オプション」を選択します。
- 「表示」タブにし、「詳細設定」の「登録されている拡張子は表示しない」のチェックを外して下さい。
これで準備は完了です!
テキストファイルとは、拡張子がデフォルトで「txt」になっているファイルです。そして、csvファイルは名前の通り「csv」となっています。
さて、前置きが長くなりましたが、次から実際にこのファイルの読み込みを行っていきます!
2.テキストファイルを読み込んでみよう
テキストファイルを読み込む方法は、大きく分けて下の3つあります。
この中で個人的なおすすめは、「普段はreadlines」で「データが大きいときはreadlineで処理を分ける」がおすすめです!(初心者の方はとりあえずreadlinesで良いと思います)
では、一つずつ解説していきます。
とその前に、読み込むテキストファイルを先に作っておきましょう!
メモ帳を開いて以下の文字をコピペし、python勉強用のフォルダに「practice.txt」という名前で保存してください。
12345 abcde あいうえお
1.全体を一気に読み込む方法(read)
まず、全体を一気に読み込む方法「read」を使ってみましょう!
以下のコードを「practice.txt」を保存した場所で実行してください。(「spyder」の実行場所については、10章で解説しています!)
f = open('practice.txt', 'r', encoding='utf-8') data = f.read() f.close() print(data)
すると、「practice.txt」に書いた内容がそのまま出力されたと思います。では、詳しく解説していきます。
まず、1行目の
f = open('practice.txt', 'r', encoding='utf-8')
ですが、これは「practice.txtという読み取りファイルを開く」という意味で、ファイルの開き方は、open(‘ファイル名’, ‘r’, encoding=’utf-8′)という形で使います。
「ファイル名」は、文字通り開きたいファイルの名前で、「r」は読み取り専用ファイルという意味です。(無くても読み取ることはできます)
そして、最後の「encoding=’utf-8′」は、文字コードを指定していて、日本語を使用する場合に必要になります!(今回の場合、「あいうえお」のところ)
そして、f = open() という形にすることで、開いたファイルを「f」という変数に割り当てています。
この辺りは、最初イメージしにくいかもしれませんが、ひとまず形を覚えてもらえば大丈夫です!
次に、2行目の
data = f.read()
ですが、「fというファイルをすべて読み込む」という意味になります。
ファイルを一括で読み込む方法は、ファイル.read()という形です。そして、それを「data」という変数に入れています。
次に、3行目の
f.close()
では、「f」というファイルを閉じる動作で、読み取り終わったファイルは必ず閉じておく必要があります。
そして最後に、4行目については、変数「data」に入れたものを出力しています。
これが、ファイルを一括で読み込む方法(read)の使用方法です。
2.全体を一気に読み込むが、1行ずつ扱える方法(readlines)
次に、全体を一気に読み込むが、1行ずつ扱える方法である「readlines」について解説していきます。下のコードを実行してください。
f = open('practice.txt', 'r', encoding='utf-8') data = f.readlines() f.close() print(data)
すると、[‘12345\n’, ‘abcde\n’, ‘あいうえお’] という「list」で出力されたと思います。では、解説していきます。
先ほどの「read」が「readlines」になっただけですが、「readlines」を使用すると、1行ごとに「list」として保存されるという特徴があるため、出力も「list」型になっています。
なぜこの「readlines」がおすすめかというと、データを扱う時は1行ごとに扱うことが多く、読み込むだけで「list」として保存してくれるため、好きな行を呼び出しやすいからです。
例えば、2行目の「abcde」だけ呼び出したい場合、下のように書きます。
print(data[1])
ただし、「readline」で読み込むと、「\n」という文字が最後に入っていることに気が付くと思います。これは改行文字と言い、文字通り改行されていることを示します。
詳しい説明は省きますが、この改行をのけたい場合、以下のように「strip()」を付けることで改行を除くことができます。
print(data[1].strip())
3.1行ずつ読み込む方法(readline)
では最後に、1行ずつ読み込む方法である「readline」について解説していきます。以下のコードを実行してください。
f = open('practice.txt', 'r', encoding='utf-8') for i in range(3): data = f.readline() print(data)
すると、「practice.txt」に書いた内容がそのまま出力されたと思います。では解説しますね。
「readline」の場合、1行のみ読み込むため、3行ある場合は3回「readline」で読み込む必要があります。そこで今回は「ループ処理」を用いて、「readline」による読み込みと書き出しを3回行っています。
ただし、下のように行と行の間が1つ空いてしまっていますね。
これも、「readlines」のときと同様に、改行コードである「\n」が残っているため生じています。そのため、下記のように書き換えることで、空白を除去することができます。
f = open('practice.txt', 'r', encoding='utf-8') for i in range(3): data = f.readline() print(data.strip())
3.まとめ
この章では、「テキストファイルの読み込み」について解説しました。ポイントは以下のような点でしたね。
- ファイルを開くには「open(‘ファイル名’, ‘r’, encoding=’utf-8′)」を使う。
- ファイル名.read() or readlines() or readline() の形で使用する。
- read」は全体を一括で読み込む。
- 「readlines」は全体を一括で読み込み、1行ごとに「list」として保存する。
- 「readline」は1行のみ読み込む。
次の章では、少し話題に上がった「csvファイル」の読み込みについて解説したいと思います。
また、このサイトでは初心者の方向けに「プログラミングのお勧め学習法」も紹介していますので、気になった方はそちらもご覧いただけると幸いです。
コメント