こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonでsplit()が効きません…

ローカルに保存したtxtファイルから文字列を読み込んで、その文字列をsplit()したいのですが何故だか出来ません。
何が原因と考えられるか、教えてください。

>>>f = open('./local.txt', 'w')
>>>f.write('1234@5678')
>>>f.close()

>>>f = open('./local.txt', 'r')
>>>print f.read()
1234@5678

>>>a = f.read().split('@')[0]
>>> print a

>>>b = f.read().split('@')[1]
IndexError: list index out of range

※ print a の出力結果は空でした。
f.read().encode('utf-8').split('@')も同様の結果となりました。

投稿日時 - 2014-09-14 17:03:09

QNo.8754286

困ってます

質問者が選んだベストアンサー

最初のf.read()でファイルの中身を全部読みだして、ファイルハンドラーがファイルの終端を現在の位置として指しているからではないでしょうか。
>>>print f.read()
1234@5678

PythonのファイルI/Oは、どこまで読んだかを覚えていて、これまで読んだ位置の次の位置から読めるようになっていると思います。
例えば、この実行結果はどうなると思いますか?
>>>f = open('./local.txt', 'r')
>>>print f.read(1)
>>>print f.read(1)
>>>print f.read(1)
>>>print f.read(1)
>>>print f.read(1)
>>>f.close()

データの中身がわかっているなら、こういうコードもありかもしれません。
>>>data = open('./local.txt').read().split('@')
>>>print data[0]
>>>print data[1]

投稿日時 - 2014-09-14 17:26:32

お礼

回答有難うございます。

>>>data = open('./local.txt').read().split('@')
>>>print data[0]
>>>print data[1]

のやり方で出来ました。

>ファイルハンドラー
藪から棒が出てきた気分でプログラミングのディープさを垣間見ました。終端だと空の文字列を返すようですね。
read()に数値を入れるとこんな出力になるんですね。面白いです。

投稿日時 - 2014-09-14 18:22:42

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問