【问题标题】:How to extract data from msg files and insert (append) them to csv file?如何从 msg 文件中提取数据并将它们插入(附加)到 csv 文件?
【发布时间】:2020-03-09 14:13:58
【问题描述】:

我正在制作一个脚本,用于从 Outlook 保存的消息(.msg 扩展名)中提取特定数据(主题、日期、发件人),并且我想一次将数据填充到 csv 文件中。

所以脚本应该遍历文件夹的带有 msg 扩展名的文件并提取数据。这是我迄今为止能想到的。

此代码创建了初始文件,但它从第一封阅读的电子邮件中复制了 X 次相同的数据,而不是移动到下一封。

import os
import glob
import csv
import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

files = glob.glob('PATH_TO_FILES\\*.msg')


for file in files:
    msg = outlook.OpenSharedItem(file)



    #print(file)

    #with open(file) as f:

        #msg=f.read()

        #print(msg)


    with open(r'Email.csv', mode='w') as file:
        fieldnames = ['Subject', 'Date', 'Sender']
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()

        #for f in os.listdir('.'):
        for f in files:


            #if not f.endswith('.msg'):
                #continue

    #msg = msg.Message(f)
                msg_sender = msg.SenderName
                msg_date = msg.SentOn
                msg_subj = msg.Subject
    #msg_message = msg.Body

                writer.writerow({'Subject': msg_subj, 'Date': msg_date, 'Sender': msg_sender})

【问题讨论】:

    标签: python outlook


    【解决方案1】:

    这是一个相当恶毒的错误......

    看看你的结构:

    for file in files:
        msg = outlook.OpenSharedItem(file)
        with open(r'Email.csv', mode='w') as file:
            for f in files:
                # process msg
    

    并关注发生的事情:

    • 你循环访问 msg 文件
      • 你存储一个
      • 您在'w' 模式下打开 csv 文件会擦除之前的所有数据
      • 你再次循环访问 msg 文件
        • 并处理存储的文件

    因此,您对 msg 文件有 2 级循环,并且外部循环的每次迭代都会重置 csv 文件。最后,只有最后一个重要,并且处理相同的最后一个文件 n 次。

    如何解决:打开 csv 文件后,只需在文件上循环一次:

    with open(r'Email.csv', mode='w') as file:
        for f in files:
            msg = outlook.OpenSharedItem(f)
            # process msg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2020-06-25
      • 2020-02-19
      • 1970-01-01
      • 2019-07-22
      • 2015-06-26
      • 1970-01-01
      相关资源
      最近更新 更多