プログラムが嫌いになりそうな女性
つちもぐら にそそのかされて、仕事を自動化してみようとPythonを始めてみたけど、ファイルの読み込ませ方がよく分からない。簡単な四則演算 とかlist やif文 ,for文 とかは直感的に理解できたんだけど。やっぱファイル修正は直接手でやるのが一番かな?
嫌われたくないモグラ
Pythonでファイルを読み込ませる方法について、つちもぐら が解説します。 事務作業の自動化は、ファイルを読み込ませて、プログラム内部で加工して、ファイル出力するのが基本です。
このページでは、まず最初にPythonでテキトファイルを簡単に読み込ませる方法を説明します。次に、Pythonの代表的なファイルオブジェクトのメソッドについても簡単に説明します。
本記事に記載のPythonスクリプト動作確認環境
OS : Windows10(64bit版) Python version : 3.7.3
Pythonで簡単にテキストファイルを読み込む方法
csvファイル “SampleTextSJIS.csv” を読み込む例を示します。 見て頂けると分かるように、読み込んで画面に表示するだけであれば、たったの3行です。
“SampleTextSJIS.csv” は名前の通り、Shift_JISの文字コードで保存されたファイルです。
Pythonソースコード(コピペでご使用ください)
f = open(r"C:\Python_source\01_TextFileRead\SampleTextSJIS.csv")
for line in f:
print (line,end="")
実行結果(ファイルの中身と同じ)
出席番号,名前,点数 1,たろう,96 2,じろう,68 3,さぶろう,31
Pythonソースコードの詳細説明
1行目:: f = open(r”C:\Python_source\01_TextFileRead\SampleTextSJIS.csv”)
open() はPyhtonでファイルを開くための組み込み関数 です。組み込み関数とは、名前の通り初めから組み込まれている関数 なので、ソースコード中で読み込み宣言をしなくても、いきなり使えます。Pythonではよく使う関数を、組み込み関数として用意しています。
open() の引数としてファイルのパスを与える事で、 open関数はファイルオブジェクト f を返します。
本ページのPythonソースコードでは、絶対パスで記載しています。Windows10であれば、Shiftキーを押しながら、ファイルを”右クリック->プロパティ->パスのコピー(A)” でコピーしたファイルのパスを”Ctrl+v”などで張り付ければ良いです。ファイルのパス先頭の r は、windowでパスを示す時のお守りと思って頂ければ良いです。
補足:\ はPythonで特殊文字(エスケープシーケンス)を表すのに使用する
Windowsのパス区切りは逆スラッシュ(\)を用いますが、 逆スラッシュはpythonでは改行(\n)等の特殊文字を表す時に使用します。そのため、open()にファイルパスを 文字列(“”で括られた範囲)で与える時は、文字列の先頭にr を記載する事で、文字列をそのままで扱ってねとPythonに教えてあげないと、ファイルのパスを正しく認識してもらえません。(r はrawの頭文字。このような文字列はraw文字列 と呼びます)
raw文字列を使わない避策としては、 1.”\” を “/” へ置き換える。 2.”\” を “\\” へ置き換える。 がありますが、 raw文字列を使うのが一番シンプルな対応と思います。 ちなみにMacやLinuxでは、パス区切りをスラッシュ(/)で示すので、ファイルのパスを示すのに、raw文字列を使用する必要はありません。
2行目:: for line in f:
pythonのfor文 は、順番に並んだ変数(シーケン ス型 )を一つずつ取り出して処理していくイメージの動作となります。テキストのファイルオブジェクトf は、テキストファイルが1行ずつ繰り返し変数 line に文字列として渡されます。in はシーケンス型の変数と繰り返し変数の間に置かれるキーワードです。 最後の : は、これから繰り返し処理をするブロックが始まる事を示しています。Pythonではブロックをインデントで示します 。
3行目:: print (line,end=””)
2行目で与えられた繰り返し変数 line 、組み込み関数 print() でディスプレイに表示します。 第2引数の end=”” はオプションです。プリント関数は標準で出力した文字を改行(\nを挿入) しますが、元のテキストファイルにも改行コードが含まれている ため、 end=”” オプションを与えないと、出力には1行毎に空行が挿入される事となります。
補足:end には出力の末尾に付ける文字列を設定する。
end には初期値で改行コード “\n” が与えられているので、endオプションに値を設定 しない場合は改行が追加される事となります。
Pythonファイルオブジェクトのメソッド
Pythonソースコードの2行目では、ファイルオブジェクト f をシーケンス型 のデータとしてfor文 で1行ずつデータを取り出しました。ただファイルオブジェクトは、ファイルデータにアクセスする為の各種メソッドを持っており、これらを状況に応じて選択して使用する事で、より柔軟にプログラムを書く事が可能となります。
以下に代表的なファイルオブジェクトのメソッドを示します。
メソッド名 動作 read() ファイルの中身全ての文字列を返す。改行部には改行コード”\n”が埋めこまれる。 readlines() ファイルの中身全てを1行事にリスト型として返す。 readline() ファイルの1行だけを文字列として返す。もう一度実行すると次の行を返す。
使い方は、どのメソッドもオブジェクトをドッド(. )で繋ぐだけです。 例) FileALLString = f.read() このread()メソッドでは、 変数 “FileALLString” の中には改行コード “\n” も含んだ文字列が代入されます。
FileALLStringの中身
‘出席番号,名前,点数\n1,たろう,96\n2,じろう,68\n3,さぶろう,31’
本ページに記載したPythonのソースコードを編集してみて、動作を色々と確認してみてください。
実際に自分でファイルを読み込ませてるソースコードを書く時は、実現したい動作を記述しやすいメソッドを選択すれば良いです。
一般的に巨大なファイルを開くときはreadline()メソッドを使用するとファイルのデータを1行ずつ読み込むので、メモリの使用量を抑える事が出来て良いと言われています 。しかしながら今どきのPCであれば、余程巨大なファイルでもない限り気にしなくて良いでしょう。
それでは本日はこの辺とします。次回は色々な文字コードのファイルを読み込ませる方法について書きたいなと考えています。最後まで読んで頂き、ありがとうございました。