2

read()ファイルを読み込んでafterを呼び出しましたreadline()が、read()関数は残りのコンテンツを返しません。

コーデックを使用して「test.txt」という名前の utf-8 ファイルを読みたいです。内容は以下のリストです。

1572278
#*OQL[C++]: Extending C++ with an Object Query Capability.
#@José A. Blakeley
#year1995

そして、私が使用したコード:

import codes;
a = codecs.open('test.txt','r','utf-8');
b = a.readline();
c = a.read();

実行すると、次のようになります。

b:1572278
c:#*OQL[C++]: Extending C++ with an Object Query Capability.\r\n#@J

これは、ファイル全体の残りの部分ではありません -私cにはわかりません。

4

3 に答える 3

3

これは のStreamReaderWriter仕組みによるものです。これを行うreadline()と、空ではない a がいっぱいになり、linebufferを呼び出しread()てコードを読み取ると、入力ファイルで機能codecs.pyする a を指定しない限り、バッファにあるものは何でも返されます。size

os.path.getsizeのヒントとして使用する場合read():

>>> import os
>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read(os.path.getsize('test.txt'))
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

あなたはファイルを丸呑みしているので; StringIO最初にそれを行い、上で使用できます。

>>> import StringIO
>>> a = codecs.open('test.txt', 'r', 'utf-8'); 
>>> buff = StringIO.StringIO(a.read())
>>> buff.readline()
u'1572278\n'
>>> buff.read()
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

もう 1 つの簡単な解決策は、read()2 回呼び出すことです。1 回目はバッファリングされた出力を取得し、もう 1 回は残りを丸呑みします。

>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read() + a.read()
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'
于 2013-07-13T02:40:45.630 に答える
0

このread()呼び出しは、ファイルの残りの部分を取得しているようです。おそらく、適切に読み取られたものを出力していない可能性がありますが、質問にそれを行うコードが含まれていないため、わかりません。

ところで、C および C++ コードの場合のように、Python コードの行をセミコロンで終了する必要はありません。

import codecs
a = codecs.open('test.txt', 'r', 'utf-8')
b = a.readline()
c = a.read()
a.close()

print('b:%r' % b)
print('c:%r' % c)

出力:

b:u'\ufeff1572278\r\n'
c:u'#*OQL[C++]: Extending C++ with an Object Query Capability.\r\n#@Jos\xe9 A. Blakeley\r\n#year1995\r\n'
于 2013-07-13T08:46:04.383 に答える