最近忙しく全然更新する暇が無くなってきた。。。
今やってる事は人生掛かっているので、
しょうがないっす!
ってことで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()