我目前正在使用csv文件在我的django模型中插入数据。下面是一个使用的简单保存功能:
def save(self):
myfile = file.csv
data = csv.reader(myfile, delimiter=',', quotechar='"')
i=0
for row in data:
if i == 0:
i = i + 1
continue #skipping the header row
b=MyModel()
b.create_from_csv_row(row) # calls a method to save in models
该功能与ascii字符完美配合。但是,如果csv文件有一些非ascii字符,则会引发错误: UnicodeDecodeError 'ascii'编解码器无法解码位置1526中的字节0x93:序数不在范围内(128)
我的问题是:如何在保存我的csv文件之前删除非ascii字符以避免此错误。
提前致谢。
答案 0 :(得分:6)
如果您真的想剥离它,请尝试:
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
*警告这将修改您的数据* 它试图找到一个接近的匹配 - 即ć - > ç
或许更好的答案是使用unicodecsv代替。
-----编辑----- 好的,如果您根本不关心数据是否完全表示,请尝试以下操作:
# If row references a unicode string
b.create_from_csv_row(row.encode('ascii', 'ignore'))
如果row是一个集合,而不是unicode字符串,则需要将该集合迭代到字符串级别以重新序列化它。
答案 1 :(得分:3)
如果要从数据中删除非ascii字符,请遍历数据并仅保留ascii。
for item in data:
if ord(item) <= 128: # 1 - 128 is ascii
[append,write,print,whatever]
如果你想将unicode字符转换为ascii,那么DivinusVox的上述响应是准确的。
答案 2 :(得分:3)
Pandas csv解析器(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html)支持不同的编码:
import pandas
data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=',')