当前位置: 首页 > 面试题库 >

在写入CSV期间,Python ASCII编解码器无法编码字符错误

段阳夏
2023-03-14
问题内容

我不确定要如何处理此错误。我认为这与需要添加.encode(’utf-8’)有关。但是我不确定这是否是我需要做的,也不是应该在哪里应用。

错误是:

line 40, in <module>
writer.writerows(list_of_rows)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 1
7: ordinal not in range(128)

这是我的python脚本的基础。

import csv
from BeautifulSoup import BeautifulSoup

url = \
'https://dummysite'

response = requests.get(url)

html = response.content

soup = BeautifulSoup(html)

table = soup.find('table', {'class': 'table'})

list_of_rows = []
for row in table.findAll('tr')[1:]:
list_of_cells = []
for cell in row.findAll('td'):
    text = cell.text.replace('[','').replace(']','')
    list_of_cells.append(text)
list_of_rows.append(list_of_cells)

outfile = open("./test.csv", "wb")
writer = csv.writer(outfile)
writer.writerow(["Name", "Location"])
writer.writerows(list_of_rows)

问题答案:

Python 2.x CSV库已损坏。您有三个选择。按照复杂度的顺序:

  1. 编辑:请参见下文 使用固定库 https://github.com/jdunck/python-unicodecsv( pip install unicodecsv)。用作临时替代品-示例:

    with open("myfile.csv", 'rb') as my_file:    
    r = unicodecsv.DictReader(my_file, encoding='utf-8')
    
  2. 阅读有关Unicode的CSV手册:https://docs.python.org/2/library/csv.html(请参阅底部的示例)

  3. 手动将每个项目编码为UTF-8:

    for cell in row.findAll('td'):
    text = cell.text.replace('[','').replace(']','')
    list_of_cells.append(text.encode("utf-8"))
    

编辑,我发现读取UTF-16时python-unicodecsv也坏了 。它抱怨任何0x00字节。

而是使用https://github.com/ryanhiebert/backports.csv,它更类似于Python
3的实现,并使用io模块。

安装:

pip install backports.csv

用法:

from backports import csv
import io

with io.open(filename, encoding='utf-8') as f:
    r = csv.reader(f):


 类似资料:
  • 问题内容: 我正在使用maven编译软件包,它说生成失败,并显示以下编译错误: SpanishTest.java [31,81]不可编码的字符,用于编码UTF8 我在线上搜索了很多人,将源编码从UTF-8更改为ISO-8859-1似乎可行,但是我仍然遇到相同的编译错误。我正在使用32位Ubuntu。这是该标签在我的pom.xml中的外观 即使我将标签更改为ISO-8859-1,我仍然会收到错误消息

  • 问题内容: 当上传具有非ASCII字符的文件时,出现UnicodeEncodeError: 我使用MySQL,nginx和FastCGI运行Django 1.2。 根据Django Trac数据库,这是已解决的问题,但是我仍然有问题。欢迎提供有关如何修复的任何建议。 编辑:这是我的图像字段: 问题答案: 在对此进行更多调查之后,我发现我尚未在我的主要Nginx配置文件中设置字符集: 通过添加以上内

  • 问题内容: 我正在尝试抓取一个网站,但这给我一个错误。 我正在使用以下代码: 我收到以下错误: 我该怎么做才能解决此问题? 问题答案: 我通过添加将其修复。 那意味着变成。

  • 问题内容: 当我尝试在数据库中插入外来字符时,可能是什么导致此错误? 而我该如何解决呢? 谢谢! 问题答案: 字符U + 201C左双引号在Latin-1(ISO-8859-1)编码中不存在。 这 是 目前在代码页1252(西欧)。这是Windows特定的编码,基于ISO-8859-1,但会将多余的字符放入0x80-0x9F范围内。代码页1252通常与ISO-8859-1混淆,这是一种令人烦恼但现

  • 我正试图抓取一个网站,但它给了我一个错误。 我正在使用以下代码: 我得到了以下错误: 我能做些什么来解决这个问题?

  • 我的代码适用于英语文本,但不适用于俄语search_text。我怎么才能修好它? 错误文本 UnicodeEncodeError:“latin-1”编解码器无法对位置41-46中的字符进行编码:正文('МССаа')不是有效的latin-1。使用身体。如果要发送utf-8编码的文件,请对其进行编码(“utf-8”)。 我的代码 我试过了 但是收到的