2012-05-10 52 views
-1

我有一個西班牙文檔我想用Python進行格式化。問題在於,在輸出文件中,重音字符會以這種方式混亂:\ xc3 \ xad。 當我做了一些類似的編輯時,我成功地保留了正確的字符,儘管我已經嘗試過所有我做過的事情,但是不知何故,這次它不會工作。 這是當前版本的代碼:Python:輸出中出現拉丁字符的問題

# -*- coding: utf-8 -*- 

import re 
import pickle 

inputfile = open("input.txt").read() 

pat = re.compile(r"(@.*\*)") 

mylist = pat.findall(inputfile) 

outputfile = open("output.txt", "w") 

pickle.dump(mylist, outputfile) 

outputfile.close() 

我使用Python 2.7在Windows 7 任何人都可以看到任何明顯的問題?輸入文件以utf-8編碼,但我也嘗試過對latin-1進行編碼。謝謝。

澄清:我的問題是,拉丁字符不能正確顯示在輸出中。 它現在解決了,我不得不添加此行,馬塔的建議:

inputfile = inputfile.decode('utf-8') 
+1

你試過'.encode( 'UTF-8')''-ing的mylist'的元素? –

+2

將錯誤提示給您的問題 –

+1

爲什麼您希望'pickle.dump'輸出完全可讀? – geoffspear

回答

2

它的輸入文件中utf-8編碼,那麼你應該decode它首先用它的工作:

import re 
import pickle 

inputfile = open("input.txt").read() 
inputfile = inputfile.decode('utf-8') 

pat = re.compile(r"(@.*\*)") 

mylist = pat.findall(inputfile) 

outputfile = open("output.txt", "w") 

pickle.dump(mylist, outputfile) 

outputfile.close() 

如此創建的文件將包含您的列表的一個醃製版本。它你寧願hava一個人類可讀的文件,那麼你可能只想使用一個純文件。
也是一個很好的方式來處理不同的編碼使用codecs模塊:

import re 
import codecs 

with codecs.open("input.txt", "r", "utf-8") as infile: 
    inp = infile.read() 

pat = re.compile(r"(@.*\*)") 
mylist = pat.findall(inp) 

with codecs.open("output.txt", "w", "utf-8") as outfile: 
    outfile.write("\n".join(mylist)) 
+0

工作,非常感謝! – Yngve

+0

起初,我沒有注意到你的答案中的「編解碼器」部分,對不起。我會嘗試一個。 – Yngve