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()

投稿者:

kishir

趣味: sk8, ピスト、ターンテーブル、レコード 仕事: Python, Objective-C, PHP, JavaScript

7 thoughts on “Pythonを勉強中 vol.11”

  1. >webooさん

    コメントありがとうございます!
    早速やってみたら、
    ちゃんと出来ました。
    なるほど「strip()」を使うんですね!
    調べてみたら、
    http://funini.com/kei/py/basics.shtml に記載されていました。
    文末の余計な改行を削除するには、strip()を用いるんですね。
    勉強になりました。

  2. Pythonではfile(ライク)オブジェクトのインターフェイスはよく使われます
    単なる文字列オブジェクトもStringIOモジュールでラップするとファイルのようなインターフェイスを被せられるよ!

    >>> import StringIO
    >>> input = StringIO.StringIO(“””







    … “””)
    >>> for line in input.readlines(): print line,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です