【问题标题】:Parsing contact info from a .pst (outlook) file从 .pst (outlook) 文件中解析联系人信息
【发布时间】:2017-11-02 17:47:45
【问题描述】:

我有 .pst(outlook)文件,其中包含旧电子邮件和电子邮件联系人(大约 3980 个),我想将其导出为机器可读格式。

Outlook 2016 已经提供了将联系人导出到 .csv 文件的选项,但在执行导出操作后,可以看到该文件的结构不正确。 “备注”字段可能包含一条消息,其中可能包含多个换行符。这反过来又破坏了 .csv 格式,因为每个条目都应以第一个联系人字段的值开头(但在这些情况下,这些行表示所提到的“备注”字段的连续内容)。完成“备注”字段后,下一行通常包含条目的其余值。

csv 输出示例:

"Title","First Name",... <- header field values of the exported .csv
"","John","","Travolta","","ValueX","","","ValueY",,,"ValueZ",... <- start of the contact entry
www.link1.com           <- start of the "Notes" field (same contact)
..................      <- "Notes" field continued (same contact)
www.link2.com           <- "Notes" field continued (same contact)
...................     <- "Notes" field continued (same contact)
"asd","asdas","asdasd","asdasd"             <- rest of the contact fields (same contact)
"","Nicolas","Cage","","","ValueX","","","ValueY",,,"ValueZ",... <- 2nd contact (in one line)

我想修正导出文件的格式,因此“备注”字段不会跨越多行,并且每个联系人将在文件中表示为单行。

我想我有两个选择:

  • 编写一个脚本 (python),它会遍历行并修复格式(我想避免这样做,因为脚本可能会忽略某些内容)。
  • 找到一个用于解析 .pst 文件的 API,并尝试以合适的格式序列化联系人(通过指定如何手动序列化“Notes”字段)。

有谁知道,如果我忽略了某些东西,是否可以以更简单的方式解决?

亲切的问候。

编辑:我说的是this 问题。

【问题讨论】:

  • CSV 文件允许在单元格中使用换行符。尝试将其加载到 Excel 中,您应该会看到它正确显示。
  • 我添加了一个指向 OP 的链接,在那里有人处理了同样的问题。

标签: python csv email outlook


【解决方案1】:

从 Outlook 导出的文件没有损坏,尽管它看起来可能是损坏的。实际上,引号内的换行符被认为是单元格的一部分。因此,如果单元格有换行符,则意味着将从文件中的多行加载单个“行”。

例如,对于 CSV,假设一行中有四个单元格,abcd。这看起来像:

a,b,c,d

现在将c 更改为c1\nc2,即它有一个换行符:

a,b,"c1
c2",d

单元格现在被引用并出现在多行中。标准 Python CSV 库将能够正确解析此内容,包括标准 Outlook 导出的 CSV 联系人文件。

在给定从 Outlook 导出的标准联系人 CSV 文件的情况下,以下显示每个联系人的姓名和家庭地址:

import csv

with open('contacts.csv', 'r', newline='') as f_contacts:
    csv_contacts = csv.DictReader(f_contacts)

    for contact in csv_contacts:
        print(contact['First Name'], contact['Last Name'])
        print("{}{}{}".format(contact['Home Street'], contact['Home Street 2'], contact['Home Street 3']).replace('\n\n','\n'))
        print()

这假设您使用的是 Python 3.x,并使用直接从 Outlook 导出的 CSV 文件进行了测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多