petitviolet_blog

@petitviolet blog

ファイル操作・ディクショナリ操作のメモ

ファイル読み込み

コード内で既に存在しているファイル(例えばinput.txt)を開きたい時に,

f = open("input.txt").readlines()
とやっても,
g = [line for line in file("input.txt")]

とやっても結果は同じ.
というかfileとopenの違いが分かりませんでしたw
ちなみに

open("input.txt", "r")

と書くのが一応丁寧で見易い.めんどくさいけど.
また,上の場合のようにメソッドを用いて読み出すとき,

f = open("input.txt")
_f = f.readlines()

としても良いが,

f.close()

を忘れないようにする.
もちろん

with open("input.txt") as f:
    for line in f:
        print line

のようにwith文を用いても良い.
読み込み時に用いるメソッドとして

  • read():1文字ずつ全て取得して各文字ごとにリストに格納する
  • readline():1行だけ取得
  • readlines():1行ずつ全て取得して各行毎にリストに格納する

の三つがあるが,基本的にはreadlines()だけで事足りるかと.

ファイル書き込み

書き込みには

  1. 新規作成したファイルに対する書き込み
  2. 存在するファイルに対する書き込み

の2つがあり,それぞれ

f = open("new_input.txt", "w")
g = open("input.txt", "a")

としてファイルを書き込みモードで開いて

f.write("Hello World!!!")
g.write("Hello World!!!")

とでも書けば,new_input.txt, input.txtの2つのファイルの
末尾にそれぞれHello World!!!と書き込まれる.
ちなみに "a" オプションでも新規作成は出来ますw
ここでも

f.close()
g.close()

を忘れないこと.

...pythonは勝手にファイルを閉じてくれますけどね...

setdefaultメソッド

python使ってて辞書型配列を使うときに,

  • このキーもうあるのかな...?無いなら新しく値を入れたいんだけど...

という時に使えるのがsetdefaultメソッドということです.

setdefalut(key, value)
今から新しく作ろうとするキーを第1引数としてとり,
そのキーが既に存在すれば何もしない.
存在しなければそのキーを新しく作り,第2引数の値を格納する.

という機能.
例を挙げてみると,

>>> dict = {'tom':180, 'jim':170, 'mary':155}
>>> dict['tom']
180
#tanaka君のデータ入れたっけ?
>>> dict['tanaka']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'tanaka'
#無かったから入れよう
>>> dict['tanaka'] = 165
>>> dict
{'tanaka': 165, 'jim': 170, 'mary': 155, 'tom': 180}

という流れが

#jim君のデータ入ってなかったら180にしよう
>>> dict.setdefault('jim', 180)
170
#170という値が入ってたから変更なし.
#次にroger君のデータが入ってなかったら190にしよう
>>> dict.setdefault('roger', 190)
190
>>> dict
{'tanaka': 165, 'jim': 170, 'roger': 190, 'mary': 155, 'tom': 180}

こんな感じに.便利.