【问题标题】:How do I access both binary and text data for email processing with Python 3?如何使用 Python 3 访问二进制和文本数据以进行电子邮件处理?
【发布时间】:2012-04-29 14:43:01
【问题描述】:

我正在将 Python 2 程序转换为 Python 3,但我不确定要采用的方法。

程序从 STDIN 读取单个电子邮件,或指定包含电子邮件的文件。然后程序解析电子邮件并对它们进行一些处理。

所以我们需要处理电子邮件输入的原始数据,将其存储在磁盘上并对其进行 MD5 哈希处理。我们还需要处理电子邮件输入的文本,以便通过 Python 电子邮件解析器运行它并提取字段等。

对于 Python 3,我不清楚我们应该如何读取数据。我相信我们需要原始二进制数据才能对其进行 md5 处理,并能够将其写入磁盘。我知道我们还需要它以文本形式使用电子邮件库来解析它。 Python 3 对 IO 处理和文本处理进行了重大更改,我看不到读取电子邮件原始数据以及以文本形式使用相同数据的“正确”方法。

谁能提供这方面的一般指导?

【问题讨论】:

    标签: python string unicode io python-3.x


    【解决方案1】:

    一般指导是尽快将所有内容转换为 unicode 并保持这种状态,直到最后一分钟。

    请记住,str 是旧的 unicodebytes 是旧的 str

    首先请参阅http://docs.python.org/dev/howto/unicode.html

    对于 Python 3,我不清楚我们应该如何读取数据。

    打开文件时指定encoding,它会自动为您提供unicode。如果您从 stdin 阅读,您将获得 unicode。可以从stdin.buffer读取二进制数据。

    我相信我们需要原始二进制数据才能对其进行 md5 处理

    是的,你知道。 encode 当您需要对其进行哈希处理时。

    并且还能够将其写入磁盘。

    您在打开要写入的文件时指定encoding,文件对象会为您编码。

    我知道我们还需要它以文本形式使用电子邮件库来解析它。

    是的,但由于它会在您打开文件时被解码,所以您将拥有它。


    也就是说,这个问题对于 Stack Overflow 来说实在是太开放了。当您有具体问题/疑问时,请回来,我们会提供帮助。

    【讨论】:

    • 请注意,您不能使用标准输入进行编码。但是如何在 Python 3 中从标准输入读取二进制文件已经是一个在 SO 上被多次回答的问题。 :-)
    • 不,这是 Python 3,你会从标准输入获得 unicode。问题正在变得二进制,这并不是真正的问题,只是不明显。您从 stdin.buffer 中读取。
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多