7

Unicode 文字の最初の行と ASCII の他のすべての行を含むテキスト ファイルがあります。最初の行を 1 つの変数として読み取り、他のすべての行を別の変数として読み取ろうとします。ただし、次のコードを使用すると:

# -*- coding: utf-8 -*-
import codecs
import os
filename = '1.txt'
f = codecs.open(filename, 'r3', encoding='utf-8')
print f
names_f = f.readline().split(' ')
data_f = f.readlines()
print len(names_f)
print len(data_f)
f.close()
print 'And now for something completely differerent:'
g = open(filename, 'r')
names_g = g.readline().split(' ')
print g
data_g = g.readlines()
print len(names_g)
print len(data_g)
g.close()

次の出力が得られます。

<open file '1.txt', mode 'rb' at 0x01235230>
28

7

And now for something completely differerent:

<open file '1.txt', mode 'r' at 0x017875A0>

28

77

readlines() を使用しない場合、 codecs.open() と open() の両方で最初の 7 行だけでなく、ファイル全体が読み取られます。

なぜそのようなことが起こるのですか?また、「r」パラメータが追加されているにもかかわらず、codecs.open() がバイナリ モードでファイルを読み取るのはなぜですか?

更新: これは元のファイルです: http://www1.datafilehost.com/d/0792d687

4

1 に答える 1