Sponsored Link

月別アーカイブ: 6月 2014

(24) テキストファイルを1行ずつ読み込み(その2)

(24) テキストファイルを1行ずつ読み込み(その2)

(20) テキストファイルを1行ずつ読み込み の別の方法です。
enumerate() を使います。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh):
...     print a
...     print b
...
0
book

1
car

2
pen

3
house

4
ball

行番号の初期値はstart=xxxxxで指定できる。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh, start=1):
...     print a
...     print b
...
1
book

2
car

3
pen

4
house

5
ball

ファイルから読み込んだ各行の改行文字はrstrip()で削除できる。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh, start=1):
...     print a
...     print b.rstrip()
...
1
book
2
car
3
pen
4
house
5
ball

(23) numpyで要素数の異なる配列の計算

(23) numpyで要素数の異なる配列の計算
>>> a=np.eye(5)
>>> a
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])
>>>
>>> b=np.ones([5,1])
>>> b
array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])
>>>
>>> a+b
array([[ 2.,  1.,  1.,  1.,  1.],
       [ 1.,  2.,  1.,  1.,  1.],
       [ 1.,  1.,  2.,  1.,  1.],
       [ 1.,  1.,  1.,  2.,  1.],
       [ 1.,  1.,  1.,  1.,  2.]])

(22) numpyで配列の足し算・引き算

(22) numpyで配列の足し算・引き算

まずは5行3列の配列変数を3個作ってみる。

>>> a=np.zeros([5,3])
>>> a
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>>
>>> b=np.ones([5,3])
>>> b
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>>
>>> c=np.random.rand(5,3)
>>> c
array([[ 0.16668109,  0.16426297,  0.33385086],
       [ 0.47174275,  0.44352061,  0.67223213],
       [ 0.79063585,  0.06861268,  0.59725334],
       [ 0.90522505,  0.93270762,  0.27228631],
       [ 0.57300036,  0.93921266,  0.00304121]])

足し算・引き算してみる。

>>> a+b
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>>
>>> a+b*2
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
>>>
>>> b+c
array([[ 1.16668109,  1.16426297,  1.33385086],
       [ 1.47174275,  1.44352061,  1.67223213],
       [ 1.79063585,  1.06861268,  1.59725334],
       [ 1.90522505,  1.93270762,  1.27228631],
       [ 1.57300036,  1.93921266,  1.00304121]])
>>>
>>> b+b+c
array([[ 2.16668109,  2.16426297,  2.33385086],
       [ 2.47174275,  2.44352061,  2.67223213],
       [ 2.79063585,  2.06861268,  2.59725334],
       [ 2.90522505,  2.93270762,  2.27228631],
       [ 2.57300036,  2.93921266,  2.00304121]])
>>>
>>> b*2-c
array([[ 1.83331891,  1.83573703,  1.66614914],
       [ 1.52825725,  1.55647939,  1.32776787],
       [ 1.20936415,  1.93138732,  1.40274666],
       [ 1.09477495,  1.06729238,  1.72771369],
       [ 1.42699964,  1.06078734,  1.99695879]])

(21) reloadで強制import

(21) reloadで強制import

自作のモジュール mylib.pyを省略名 mlで importする。

>>> import mylib as ml

mylib.pyを別画面上で編集した後、これを反映させたい場合、再度importすればよい。

>>> import mylib as ml

これでは再度importされない…

強制importさせるにはreload関数を使用する。

>>> reload(ml)
<module 'mylib' from 'mylib.py'>

追記:
python3では reload()が使えなくなった。
同じことを以下のように実現できる。

import importlib
importlib.reload(xxxxxxxx)

ひと手間増えた感じです。

(20) テキストファイルを1行ずつ読み込み

(20) テキストファイルを1行ずつ読み込み

読み込むのは以下のようなテキストファイルとする。

[user@dog-server]$ ls
data.txt
[user@dog-server]$ cat data.txt
book
car
pen
house
ball

pythonでこのテキストファイルを1行ずつ読み込む。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     print line
...     line = fh.readline()
...
book

car

pen

house

ball

改行文字まで含まれているようだ。
読み込んだ1行分のデータを split() を使って改行文字「\n」で分割し、前側のデータを表示してみる。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     line = line.split('\n')
...     print line[0]
...     line = fh.readline()
...
book
car
pen
house
ball

改行文字が消えた。

改行文字は rstrip() でも除去できる。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     print line.rstrip()
...     line = fh.readline()
...
book
car
pen
house
ball

(19) テキストファイルの読み書き

(19) テキストファイルの読み書き

まずはテキストファイルを作成する。

>>> fh = open('data.txt','w')
>>> fh.write('hello\n')
>>> fh.write('see you!\n')
>>> fh.close()
>>>
[user@dog-server]$ ls
data.txt
[user@dog-server]$
[user@dog-server]$ cat data.txt
hello
see you!

次に、作成したファイルを読み込む。

>>> fh = open('data.txt','r')
>>>
>>> data = fh.read()
>>> data
'hello\nsee you!\n'
>>>
>>> print data
hello
see you!
>>>
>>> ary = data.split('\n')
>>> ary
['hello', 'see you!', '']
>>> ary[0]
'hello'
>>> ary[1]
'see you!'

(16) ディクショナリは文字列で要素にアクセスできる

(16) ディクショナリは文字列で要素にアクセスできる
>>> dic = {'aaa': 10, 'bbb':55, 'ccc':[11,22,33]}
>>>
>>> dic['aaa']
10
>>>
>>> dic['bbb']
55
>>>
>>> dic['ccc']
[11, 22, 33]
>>>
>>> dic['ccc'][0]
11
>>> dic['ccc'][1]
22
>>> dic['ccc'][2]
33

キーの一覧は keys で表示する。

>>> dic = {'aaa': 10, 'bbb':55, 'ccc':[11,22,33]}
>>> dic.keys()
['aaa', 'bbb', 'ccc']

キーの有無は has_key で確認する。

>>> dic = {'aaa': 10, 'bbb':55, 'ccc':[11,22,33]}
>>> dic.has_key('aaa')
True
>>> dic.has_key('ddd')
False

存在しないキーは追加できる。

>>> dic = {'aaa': 10, 'bbb':55, 'ccc':[11,22,33]}
>>> dic
{'aaa': 10, 'bbb': 55, 'ccc': [11, 22, 33]}
>>> dic['ddd']='hello'
>>> dic
{'aaa': 10, 'bbb': 55, 'ccc': [11, 22, 33], 'ddd': 'hello'}
>>> dic.keys()
['aaa', 'bbb', 'ccc', 'ddd']

要素一覧は items で表示する。

>>> dic = {'aaa': 10, 'bbb':55, 'ccc':[11,22,33]}
>>> dic.items()
[('aaa', 10), ('bbb', 55), ('ccc', [11, 22, 33])]

キーのラベルでソートする。

>>> dic = {'zzz':37, 'uuu':72, 'aaa':55}
>>> dic2 = sorted(dic.items(), key=lambda x: x[0])
>>> dic2
[('aaa', 55), ('uuu', 72), ('zzz', 37)]

キーの値でソートする。

>>> dic = {'zzz':37, 'uuu':72, 'aaa':55}
>>> dic2 = sorted(dic.items(), key=lambda x: x[1])
>>> dic2
[('zzz', 37), ('aaa', 55), ('uuu', 72)]