python - 如何在 Python 中以 utf-8 重新编码 mbox 文件?
问题描述
我已经导出了一堆 Gmail 邮件,并希望使用 Python 解析它们并获得见解。但是,在导出时,我发现这些 mbox 文件中有一个奇怪的编码,例如字符“é”被转换为=E9
,引号(“和”)被转换为=E2=80=9C
和=E2=80=9D
。我的电子邮件经常有很多外国脚本,因此将这些文件解码为 utf-8 对我来说非常重要。此外,我还经常收到带有表情符号的消息,这些消息也传达了我需要保留的重要情感信息。
我发现这种编码称为 Quoted Printable 并且我尝试使用quopri
Python 模块,但是没有成功。
这是我的简化代码:
import os
import quopri
from pathlib import Path
for filename in os.listdir(directory):
if filename.endswith(".mbox"):
input_filename = Path(os.path.join(directory,filename))
output_filename = Path(os.path.join(directory,filename+'_utf-8'))
with open(input_filename, 'rb'):
quopri.decode(input_filename, output_filename)
但是,在运行此程序时,我在最后一行收到以下错误:AttributeError: 'WindowsPath' object has no attribute 'read'
. 我不明白为什么会出现此错误,因为定义的路径指向文件。
解决方案
您需要为上下文管理器(with
语句)声明名称,如下所示:
with input_filename.open('rb') as infile, output_filename.open('wb') as outfile:
quopri.decode(infile, outfile)
推荐阅读
- api - API 在使用 fetch 挂钩时有效。使用 @click 方法时,相同的 API 不起作用。纽斯特
- reactjs - 多个组件上的 setInterval 导致不匹配的动画
- laravel - 这是我的代码,我想将图像 url 保存在数据库中我正在使用 laravel 我的问题是我如何将图像 url 保存在数据库中
- php - PHP 正则表达式替换 Html 结束标签
- python - Keras 深度学习 ValueError:logits 和标签必须具有相同的形状 ((None, 2) vs (None, 1))
- javascript - 如何生成具有给定开始值和结束值的数字模式?
- javascript - “未定义不是对象”尝试在 HTML 中引用单元格时
- javascript - 使用角度js在所有字段为空时禁用保存按钮
- python - 是否可以使用 **kwargs 中的关键字名称来过滤我的数据框?
- angular - 如何获取创建ID并使用角度动态更改其内容