Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除csv文件中的非ascii字符_Python_Django_Csv_Converter - Fatal编程技术网

Python 删除csv文件中的非ascii字符

Python 删除csv文件中的非ascii字符,python,django,csv,converter,Python,Django,Csv,Converter,我目前正在使用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=M

我目前正在使用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字符以避免此错误


提前谢谢。

如果您真的想脱掉它,请尝试:

import unicodedata

unicodedata.normalize('NFKD', title).encode('ascii','ignore')
*警告这将修改您的数据* 它试图找到一个接近的匹配-即ć->c

也许一个更好的答案是使用

-----编辑----- 好的,如果您根本不关心数据的表示,请尝试以下操作:

# If row references a unicode string
b.create_from_csv_row(row.encode('ascii', 'ignore'))

如果行是集合,而不是unicode字符串,则需要在集合上迭代到字符串级别以重新序列化它。

如果要从数据中删除非ascii字符,则需要迭代数据并仅保留ascii字符

for item in data:
     if ord(item) <= 128: # 1 - 128 is ascii
          [append,write,print,whatever]
对于数据中的项:
如果ord(项)csv解析器()支持不同的编码:

import pandas
data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=',') 

谢谢你的回答,但我想完全删除csv文件中的非ascii字符。在尝试使用函数ord()时,会引发一个错误。ord()应为长度为1的字符串,但找到了列表。可能是因为每行包含多个字符(列表)。但是,我的主要问题是如何删除csv文件中的非ascii字符。@Benarito您的数据只是一维字符串列表吗?@DivinusVox,是的,一维字符串,例如第一行、第二行、第二行3@Benarito我建议@DivinusVox编辑解决方案。Ascii字符的整数ord()值介于1和128之间。如果不需要ascii字符,请使用If语句来确定字符串内容是否为ord(x)一行,以Pythonic方式执行相同的操作:“”。join([char for char in data If ord(char))谢谢你的回答,但我的主要问题是如何在保存文件内容之前删除非ascii字符。谢谢。我知道怎么做了it@DivinusVox..Thanks谢谢你的回答,但我想完全去掉非ascii字符。你知道怎么做吗