Pythonを勉強中 vol.11

最近忙しく全然更新する暇が無くなってきた。。。

今やってる事は人生掛かっているので、
しょうがないっす!

ってことでPythonでファイルを読み込んでみるってのを
やってみた。

入力ファイルのオープンは

input = open('ファイル名', 'r')

出力ファイルの作成・オープンは

output = open('ファイル名', 'w')

ファイルの読み込みは

input.read()

ってのをふまえてやってみる。
まずテスト用にファイルを作成する。
今回は「test.html」ってのを作った。
>>> input = open('test.html', 'r')
>>> print input.read()
<html>
<body>
<div>
<p>testだよ</p>
</div>
</body>
</html>

ちゃんと読み込んでいる。

次にファイルを作成し、書き出してみる。
>>> output = open('test.html', 'w')
>>> output.write('<html><body><div><p>hogehoge</p></div></body></html>')
>>> output.close()
>>> input = open('test.html', 'r')
>>> print input.read()
<html><body><div><p>hogehoge</p></div></body></html>

ちゃんと上書きされている。

さっきのファイルを違う形で読み込んでみる。
今回は「for」を使用した。
「while」でも出来るが「for」の方が一行ずつ読み込む場合は、
簡単に掛けて実行速度も速い。
>>> for char in open('test.html').read():
... print char
...
<
h
t
m
l
>
<
b
o
d
y
>
<
d
i
v
>
<
p
>
h
o
g
e
h
o
g
e
<
/
p
>
<
/
d
i
v
>
<
/
b
o
d
y
>
<
/
h
t
m
l
>
>>>

うぉ!?
一文字ずつ読んでしまったw
>>> for line in open('test.html').readlines():
... print line
...
<html><body><div><p>hogehoge</p></div></body></html>

これだと解りにくいな。
改行してからもう一回やってみる。
>>> for line in open('test.html').readlines():
... print line
...
<html>

<body>

<div>

<p>

hogehoge

</p>

</div>

</body>

</html>

改行コードが入ってるのかな?
readlines()はファイル全体を読み込んで、
内容を文字列のリストにまとめるので、
改行もやはり入ってきちゃうのか。

ちなみに同じようにwhileでやってみた
>>> file = open('test.html', 'r')
>>> while 1:
... line = file.readline()
... if not line: break
... print line,
...
<html>
<body>
<div>
<p>
hogehoge
</p>
</div>
</body>
</html>

追記

webooさんからコメントをいただき試してみました。
>>> for line in open('test.html').readlines():
... print line.strip()
...
<html>
<body>
<div>
<p>
hogehoge
</p>
</div>
</body>
</html>

文末の余計な改行を削除するには、strip()を用いるって事ですね。
ありがとうござました。

追記2

MiCHiLUさんからコメントをいただき、
SrtingIOを調べてみて試してみました。

StringIOとは、ファイルのように文字列を読み書きする。

つまり
>>> print open('test.html').read()
<html>
<body>
<div>
<p>
hogehoge
</p>
</div>
</body>
</html>



forで位置一行ずつ読み込むと
>>> for line in open('test.html').readlines():
... print line.strip()
...
<html>
<body>
<div>
<p>
hogehoge
</p>
</div>
</body>
</html>

となってしまうが、
StringIOを使うとファイルのように読み書きするので、
>>> input = StringIO.StringIO(open('test.html').read())
>>> for line in input.readlines(): print line,
...
<html>
<body>
<div>
<p>
hogehoge
</p>
</div>
</body>
</html>

こんな感じっす。
まさにファイル通りちゃんとインデントも
読んでいるっす。

いい感じです。
あいがとうございました!

ついでにStringIOにはgetvalueというメソッドがあるので、
こちらも試してみた。
>>> input.getvalue()
'<html>\n <body>\n <div>\n <p>\n hogehoge\n </p>\n </div>\n </body>\n</html>\n'

こちらはファイルの中身全体を返すので、
改行なども含まれて返してくれるっす。

あとは、
closeにてメモリを解放するっす。
>>> input.close()

Posted at: 
2007/12/22 11:30:03
0 Comments
0 TrackBacks
Tags: 
Python
Trackback: 
http://kishi-r.com/2007/12/22/python_vol11/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment
人気ブログランキング - kishi-r.com track feed
あわせて読みたい