避免在python中使用UnicodeEncodeError

pat*_*tka 1 python csv unicode

我尝试使用以下脚本使用python 将html表解析为csv:

from bs4 import BeautifulSoup
import requests
import csv


csvFile = open('log.csv', 'w', newline='')
writer = csv.writer(csvFile)
def parse():
    html = requests.get('https://en.wikipedia.org/wiki/Comparison_of_text_editors')
    bs = BeautifulSoup(html.text, 'lxml')
    table = bs.select_one('table.wikitable')
    rows = table.select('tr')
    for row in rows:
        csvRow = []
        for cell in row.findAll(['th', 'td']):
            csvRow.append(cell.getText())
        writer.writerow(csvRow)
        print(csvRow)


parse()
csvFile.close()
Run Code Online (Sandbox Code Playgroud)

此代码输出了一个清晰的格式化CSV文件,没有编码问题.一个例子 在EnricoTröger的Geany之前一切都很好.我的脚本无法写入ö csv文件,所以我尝试了这个: csvRow.append(cell.text.encode('ascii', 'replace'))而不是:csvRow.append(cell.getText()) 尽管事实上每个表格单元都嵌套了,但一切都很好b''.在此输入图像描述 那么,如何使用我的scipt获得清晰的格式化csv文件(如第一个屏幕截图中)并更换或忽略所有非unicode符号(如第二个屏幕截图中)?

Igo*_*r S 6

改变这个:

csvFile = open('log.csv', 'w', newline='')
Run Code Online (Sandbox Code Playgroud)

对于这个:

csvFile = open('log.csv', 'w', newline='', encoding='utf8')
Run Code Online (Sandbox Code Playgroud)

csv模块文档:

由于open()用于打开CSV文件进行读取,因此默认情况下使用系统默认编码将文件解码为unicode(请参阅参考资料locale.getpreferredencoding()).要使用不同的编码对文件进行解码,请使用open的encoding参数:

import csv
with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
         print(row)
Run Code Online (Sandbox Code Playgroud)

这同样适用于写入系统默认编码以外的其他内容:在打开输出文件时指定encoding参数.

我想你的系统默认编码不是utf8.你可以这样检查:

import locale
locale.getpreferredencoding()
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!