Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

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

とてもシンプルで、これがいちばん良さそうです。 しかし、公式ページでは以下のような注意も。

この方法はシンプルですが細かなコントロールをすることができません。行バッファを管理する方法が異なるので、これらを混在させて使うことはできません。

ということなのです。読み込んだ行を取り出すだけならこれでいいのだけど、他に何かするのなら、ということでしょうか?

ここはまた後で考えます。

ファイルの読み込みは以上です!

初めてのPython 第3版

初めてのPython 第3版