首页 > 解决方案 > 如何在 Python 中以 utf-8 重新编码 mbox 文件?

问题描述

我已经导出了一堆 Gmail 邮件,并希望使用 Python 解析它们并获得见解。但是,在导出时,我发现这些 mbox 文件中有一个奇怪的编码,例如字符“é”被转换为=E9,引号(“和”)被转换为=E2=80=9C=E2=80=9D。我的电子邮件经常有很多外国脚本,因此将这些文件解码为 utf-8 对我来说非常重要。此外,我还经常收到带有表情符号的消息,这些消息也传达了我需要保留的重要情感信息。

我发现这种编码称为 Quoted Printable 并且我尝试使用quopriPython 模块,但是没有成功。

这是我的简化代码:

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'. 我不明白为什么会出现此错误,因为定义的路径指向文件。

标签: python

解决方案


您需要为上下文管理器(with语句)声明名称,如下所示:

with input_filename.open('rb') as infile, output_filename.open('wb') as outfile:
    quopri.decode(infile, outfile)

推荐阅读