我有一個很大的csv文件,其中包含導致我嘗試運行的Python腳本中的錯誤的unicode字符。到目前爲止,我的移除過程非常繁瑣。我跑我的劇本,只要它擊中一個Unicode字符,我得到一個錯誤:將csv中的unicode轉換爲純文本的最佳方法?
'ascii' codec can't encode character u'\xef' in position 197: ordinal not in range(128)
然後我谷歌U「\ XEF」和揣摩角色實際上是(有沒有人知道的是什麼網站上有這些定義的列表?)。我使用這些信息來建立一個字典,我的Unicode字符轉換爲普通文本第二Python腳本:
unicode_dict = {"\xb0":"deg", "\xa0":" ", "\xbd":"1/2", "\xbc":"1/4", "\xb2":"^2", "\xbe":"3/4"}
for f in glob.glob(r"C:\Folder1\*.csv"):
in_csv = f
out_csv = f.replace(".csv", "_2.csv")
write_f=open(out_csv, "wb")
writer = csv.writer(write_f)
with open(in_csv,'rb') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
new_row = []
for s in row:
for k, v in unicode_dict.iteritems():
s = s.replace(k, v)
new_row.append(s)
writer.writerow(new_row)
write_f.close()
os.remove(in_csv)
os.rename(out_csv, in_csv)
然後,我必須再次運行代碼,收到其他錯誤,查查Google上的下一個unicode字符。必須有更好的方式,對吧?
如果這是Python 2而不是Python 3,那麼您的字符可能不是Unicode,而是[Windows-1252](http://en.wikipedia.org/wiki/Windows-1252#Code_page_layout)或[ISO 8859- 1](http://en.wikipedia.org/wiki/Latin1#Codepage_layout)。 –
@Mark:這就是OP如何解釋它們的方式。由於我們不知道他在原始文本中如何確定「\ xbd = 1/2」,所以它可能完全是其他內容 - 即西里爾語,希臘語,希伯來語或任何其他可能的8位代碼頁。 – usr2564301
@Jongware,我只能假設字符在數據的上下文中是有意義的,否則這完全是另一回事。 –