ファイルから読み込んでディクショナリに

20080911000200	2
20080911000300	6
20080911000401	10
20080911000500	11
20080911000600	12
20080911000700	16
       :

こんな感じに記述されたテキストファイルがある。実際にはWebにあるので以下のように読み込む。

In [1]: import urllib
In [2]: url = "http://stats.2ch.net/kawasemi-m/eq-20080911.txt"
In [3]: f = urllib.urlopen(url)
In [4]: enagy = [e for e in f.readlines()]
In [5]: enagy
['20080911000200\t2\n',
 '20080911000300\t6\n',
 '20080911000401\t10\n',
 '20080911000500\t11\n',
           :
 '20080911235600\t2602\n',
 '20080911235701\t2603\n',
 '20080911235800\t2604\n',
 '20080911235900\t2606\n']

'\t'までの部分は西暦+月+日+時+分+秒の並びになっているが、これの秒の部分を除いたものをkeyとして'\t'以降を要素とするディクショナリと作りたい。

keyの部分split()で得て、後半2つをスライス。

In [16]: e = enagy[0]
In [19]: e.split('\t')[0][:-2]
Out[19]: '200809110002'

keyの文字数は決まっているので直接スライス。

In [20]: e[:12]
Out[20]: '200809110002'

後者の方が直感的かな?

問題は要素の部分。split()を駆使して

In [24]: e.split('\t')[1].split('\n')[0]
Out[24]: '2'

とすれば得られなくも無い。最後の1文字をスライス。

In [27]: e.split('\t')[1][:-1]
Out[27]: '2'

どう考えても後者の方が自然だな。


というわけで、こんな感じでディクショナリを作ってみた。

import urllib

enagy={}
url = "http://stats.2ch.net/kawasemi-m/eq-20080911.txt"

f = urllib.urlopen(url)
tmp = [e for e in f.readlines()]

for e in tmp:
    enagy[e[:12]] = int(e.split('\t')[1][:-1])