python - DictWriter 抛出 UnicodeEncodeError
问题描述
我的 CSV 文件如下所示:
"Domain", "A"
rolexkings.ml,1
netmajic.com,1
northumbrianresort.info,2
дольщикиспб.рф,1
为了更新它,我正在执行以下操作(工作片段,但为简洁起见不是实际逻辑)
filename = 'file.csv'
tempfile = NamedTemporaryFile(mode='w', delete=False)
fields = ["Domain", "A"]
with open(filename, 'r', encoding='utf-8') as csvfile, tempfile:
reader = csv.DictReader(csvfile, fieldnames=fields)
writer = csv.DictWriter(tempfile, fieldnames=fields)
next(reader, None) # skip the headers
for row in tqdm(reader):
print(row['Domain'])
row = {'Domain': row['Domain'], 'A': row['A']}
writer.writerow(row)
shutil.move(tempfile.name, filename)
一旦遇到非拉丁域,我就会被抛出:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-10: character maps to <undefined>
我该如何解决?谢谢!
解决方案
您需要为tempfile
. 默认情况下,它似乎以 ASCII 模式(charmap
编解码器)打开,该模式无法处理西里尔字母字符串。您可能想要使用utf-8
,因为这是您的输入文件正在被读取的编码。
您可能还应该添加newline=""
两个文件打开调用,正如csv
模块所期望的那样,它自己处理“通用”换行符,而不是依赖 Python 的正常支持。这对于您当前操作系统上的当前数据集可能无关紧要,但如果您希望您的代码具有通用性,这是一个好主意。
推荐阅读
- angular - 如何修复 'debounceTime & distinctUntilChanged | Angular 5 中使用打字稿的 RxJS 错误
- tensorflow - 我们如何结合两个训练好的模型(深度学习网络:GAN 网络与 CNN 和 ResNet)
- javascript - 如何修复:JsBarcode“没有要渲染的元素”。错误
- arrays - 我正在尝试将 ls 的输出存储在一个数组中
- static-libraries - 如何在 Atmel Studio 7 中创建库(.a 文件)?
- amazon-web-services - 尝试通过 aws cli 创建 S3 存储桶时,为什么我不断收到 UnicodeEncodeError?
- xamarin.forms - 如何根据之前从同一选择器中选择的内容重新填充 Xamarin Picker?
- ruby-on-rails - 无法在 Rails 5 上使用 mail_form gem 发送邮件
- python - 将 logits 与标签进行比较的最佳方法是什么?
- java - 如果需要调用方法,为什么 update(Graphics g) 方法可以自动运行?