Unicode karakterlerin ilk satırı ve ASCII'deki diğer tüm satırları içeren bir metin dosyası var. İlk satırı bir değişken olarak ve diğer tüm satırları bir diğeri olarak okumayı deniyorum. Ancak, aşağıdaki kodu kullandığınızda: Aşağıdaki çıktıyı almakPython 2.7'de Open() ve codecs.open() Garip bir şekilde farklı davranıyor
# -*- 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 0x>
28
7
And now for something completely differerent:
<open file '1.txt', mode 'r' at 0x017875A0>
28
77
Ben readlines(), tüm dosya değil sadece ilk 7 satır hem okur kullanmazsanız codecs.open() ve open().
Neden böyle bir şey oluyor? Ve neden 'r' parametresine rağmen, codecs.open() ikili modda dosya okuyor?
Upd: codecs.open()
dosyası bir linebuffer doldurdu, http://www1.datafilehost.com/d/0792d687
'codecs.open()' *, * kod çözme işleminden önce yorumlanan yeni satırlara benzeyen baytları önlemek için dosyayı ikili modda açar *. Örneğin UTF-16 satırsonları '\ n \ x00' veya' \ x00 \ n' dir. –
Orijinal giriş dosyanızı paylaşırsanız yardımcı olur. –
@MartijnPieters: Cevabınız için teşekkürler! İşte dosya: http://wikisend.com/download/406380/1.txt – Kriattiffer