2016-11-15 53 views
2

循環使用此代碼,試圖在一個CSV打印每行:忽略某些字符,同時通過CSV行

import csv 

f = open('export.csv') 
csv_f = csvkit.reader(f) 

for row in csv_f: 
    print(row) 

不幸的是,CSV文件包含多行文字®,這將導致以下錯誤:

UnicodeEncodeError: 'charmap' codec can't encode character '\xae' in position 27: character maps to <undefined>

我已經通過其他的答案類似的問題搜索,並使用不同的編碼嘗試,但遺憾的是不能完全換我的頭周圍足以令它的工作。 CSV文件似乎是UTF-8格式,或者至少這是OpenOffice Calc在Windows中打開文件時說的。

有沒有什麼方法讓我在「忽略」®字符的同時打印行,以便不返回錯誤?任何替代解決方案也將不勝感激。

+0

爲我工作。你可以嘗試'print([x.decode(「latin-1」)for x in row])'? –

+0

我得到'AttributeError:'str'對象沒有屬性'decode'' – user2390206

+0

對不起。 'print([x.encode(「latin-1」)for x in row])' –

回答

1

如果要篩選一些「不可打印/怪異」的字符,你可以這樣做:

row = ["aaaaa \xae bbbbb","foo"] 

filtered_row = ["".join(c if ord(c)<128 else "." for c in s) for s in row] 
print(filtered_row) 

結果(所有奇怪的字符都被替換爲點):

['aaaaa . bbbbb', 'foo']