2015-12-21 14 views
9
try: 
    data=open('info.txt') 
    for each_line in data: 
     try: 
      (role,line_spoken)=each_line.split(':',1) 
      print(role,end='') 
      print(' said: ',end='') 
      print(line_spoken,end='') 
     except ValueError: 
      print(each_line) 
    data.close() 
except IOError: 
    print("File is missing") 

Dosya satırını yazdırırken, kod, önüne "ï» ¿"yani üç gereksiz karakter ekleme eğilimindedir.Python kodum neden bir metin dosyasından okurken fazladan karakterler "ï» ¿"yazıyor?

Gerçek çıkışı:

Man said: Is this the right room for an argument? 
Other Man said: I've told you once. 
Man said: No you haven't! 
Other Man said: Yes I have. 

Beklenen çıkış: Ben Python 2. farklı kodlamalar kolları Python 3, bu bir kopyasını bulamıyorum

Man said: Is this the right room for an argument? 
Other Man said: I've told you once. 
Man said: No you haven't! 
Other Man said: Yes I have. 
+3

Dosyanız muhtemelen UTF-8 __with__ BOM'da kodlanmıştır. İstediğiniz bu değilse, _without_ BOM kodlayın. –

+1

Olası kopyası [Bir dosyanın başlangıcından ï »¿öğesini nasıl kaldırırım?] (Http://stackoverflow.com/questions/3255993/how-do-i-remove-%c3%af-from-the- dosya başlangıcı) –

+5

@MarcB Bunun bir kopyası değil; Python PHP değildir ve UTF-8 BOM'u işlemek için daha iyi seçeneklere sahiptir. OP, 'open()' çağrısına 'encoding = 'utf-8-sig' 'komutunu verin. – senshin

cevap

23

Yani İşte cevap: Dosyayı varsayılan kodlamayla ('utf-8' olan) açmak yerine,'in beklediği ve kapattığı 'utf-8-sig' kullanın., hangisi  olarak görünüyor. Eğer Python 2 iseniz, sen mesela görmesi gereken

data = open('info.txt', encoding='utf-8-sig') 

Not Do yerine

data = open('info.txt') 

taşımaktadır

, Python, Encoding output to UTF-8 ve Convert UTF-8 with BOM to UTF-8 with no BOM in Python. Python 2'de çalışmak için codecs veya str.decode ile bazı shenaniganlar yapmanız gerekecek. Ancak Python 3'te yapmanız gereken tek şey dosyayı açtığınızda encoding= parametresini ayarlamaktır.

0

Excel csv dosyaları ile uğraşırken çok benzer bir sorun yaşadım. Başlangıçta, dosyamı açılır menüden .csv utf-8 (virgülle ayrılmış) dosyası olarak kaydetmiştim. Sonra sadece bir .csv (virgülle ayrılmış) dosya olarak kaydettim ve her şey iyi. Belki de .txt dosyasıyla benzer bir sorun olabilir.