Pythonの基礎 ファイル編(読み込み)
Pythonでファイルの読み込み
公式ページを見てみる
ファイルを開くには、 open() 関数を使う
f = open(filename, mode)
filenameはファイルのパス
modeはモード
- r は読み込みモード
- w は書き込みモード(既存の同名ファイルは上書き)
- a は追記モード
- r+は読み書き両方のモード
こんな感じに使う。今回はテキストファイルを読み込んでみます。
f = open('./tmp/sample.txt' 'r') #読み込みモードでsample.txtをオープンする
ファイルオープンのあとはどうするのか
fを出力させてみると?
print f
#実行結果 <open file 'sample.txt', mode 'r' at 0x102d886f0>
となりました。at以降はとりあえず置いておきます。 fはファイルオブジェクトですね。 このままプリントしても、ファイル名とモードを出力するだけで、肝心の中身は表示されません。さて、これからどうしましょう。
ファイルオブジェクト
read(size)
- ファイルをsizeバイト読み込んで文字列として返す
- sizeが省略された場合は全部読み込む。ファイルが巨大な場合には注意
- sizeが負の数だった場合には、省略されたとみなす
sample.txtの内容が以下のとき
aaaaaa bbbbbb cccccc
str = f.read() print str
#実行結果 aaaaaa bbbbbb cccccc
改行コードも含めて、strに全てが読み込まれました。
readline()で1行読み込み
あまりスマートな書き方ではありませんが、3回ループさせます。 1行読み込んで、それを文字列としてstrに格納し、表示します。 初心者にやさしいコードですね!
for i in range(3): str = f.readline() print str
#実行結果 aaaaaa bbbbbb cccccc
ちなみに行間が空いているのは、読み込んだファイルの改行コードとprintの改行が重複する為です。 これを回避するには、1行読み込んだ後に改行コードを削除するなどがいいと思います.strip()なんてどうでしょうか。
readlines()なら行ごとにリストにしてくれる
これも巨大なファイルなら大変ですが、ある程度のファイルなら便利に使えるでしょう。
strList = f.readlines() for line in strList: print line
#実行結果 aaaaaa bbbbbb cccccc
readline()の例よりもこちらの方がスマートですね。
もちろん、用途に応じて使い分けます。
ファイルオブジェクトをループさせる
公式ページによると
行を読む別のアプローチは、ファイルオブジェクトについてループをおこなうことです。これは省メモリで、速く、コードがよりシンプルになります。
だそうです。
for line in f: print line
#実行結果 aaaaaa bbbbbb cccccc
とてもシンプルで、これがいちばん良さそうです。 しかし、公式ページでは以下のような注意も。
この方法はシンプルですが細かなコントロールをすることができません。行バッファを管理する方法が異なるので、これらを混在させて使うことはできません。
ということなのです。読み込んだ行を取り出すだけならこれでいいのだけど、他に何かするのなら、ということでしょうか?
ここはまた後で考えます。
ファイルの読み込みは以上です!
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (124件) を見る