你好我有这段代码
import urllib.request
import string
import time
import gzip
from io import BytesIO
from io import StringIO
from zipfile import ZipFile
import csv
import datetime
from datetime import date
import concurrent.futures
den = date.today().replace(day=1) - datetime.timedelta(days=1)
url = '' + den.strftime("%Y%m%d") + '_OB_ADR_csv.zip'
data = urllib.request.urlopen(url).read()
zipdata = BytesIO()
zipdata.write(data)
csvfile = open('./test.csv', 'w', newline='')
csvwrite = csv.writer(csvfile, delimiter=';')
with ZipFile(zipdata) as zip:
for i, nazev in enumerate(zip.namelist()):
if i == 0:
continue
csvstring = StringIO(str(zip.read(nazev), encoding='windows-1250'))
csvreader = csv.reader(csvstring, delimiter=';')
for j, row in enumerate(csvreader):
if j == 0 and i != 1:
continue
csvwrite.writerow(row)
csvfile.close()
当我运行它时,它有时抛出“UnicodeEncodeError:'ascii'编解码器不能编码位置1中的字符'\ xf3':序号不在范围内(128)”at“csvwrite.writerow(row)”
我该如何解决这个问题?谢谢。
编辑: 我在Python 3.3下运行它
答案 0 :(得分:0)
您没有告诉csv.writer有关编码的信息。看看pydocs for the csv module:
要使用不同的编码对文件进行解码,请使用encoding参数 开放... [t]他同样适用于写作以外的东西 system default encoding:打开时指定编码参数 输出文件。
你可以从UnicodeEncodeError看到Python认为你想要用ascii编写的文件。只需指定编码参数并选择所需的编码(我的建议是encoding='utf-8'
)。