Извлечение CSV-файла из ZIP-файла из вложений писем за один раз с использованием Python - PullRequest
1 голос
/ 23 сентября 2019

Я нашел и изменил код для чтения файла вложений CSV из приложения Outlook с помощью Python.

В моем случае произошло следующее: когда я запрашиваю данные за определенный период, они будут отправлять мне ежемесячные данныезапрошенный период в отдельных электронных письмах (например, запрос: январь 2018 - декабрь 2018; получение: 12 писем с одним вложением CSV в каждом из них.) Я сохраняю все электронные письма, приходящие из хранилища данных, в «Почту DWH»

Все письма будут приходить на одну и ту же тему.Итак, мой код будет: Сохранить все CSV-вложения, которые хранятся в «Почте DWH» из указанной темы.

import win32com.client as client
import datetime as date
import os.path

def attach(mail_subject):
    outlook = client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    folder = outlook.GetDefaultFolder("6").Folders["DWH Mail"]

    val_date = date.date.today() 
    sub_target = mail_subject

    for msg in folder.Items:
        if msg.ReceivedTime.date() == val_date and msg.Subject == sub_target:
            for att in msg.Attachments:
                att.SaveASFile(os.getcwd() + "\\" + att.FileName)
                print ("Mail Successfully Extracted")
                break

    print ("Done")

Теперь я могу запросить ZIP-файл, содержащий CSV, чтобы я мог получить файлБыстрее.Где и что я должен добавить в свой код, чтобы цикл извлек и сохранил CSV-файл из ZIP-файла?Вместо того, чтобы сохранить ZIP-файл и извлечь его позже вручную.

Я относительно новичок в Python, поэтому любая помощь будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2019
import os
import pandas as pd
import zipfile

curDir = os.getcwd()
zf = zipfile.ZipFile(curDir + '/targetfolder/' + yourFileName + '.zip')
text_files = zf.infolist()
# list_ = []

print ("Decompressing and loading data into multiple files... ")

for text_file in text_files:
    print(text_file.filename)
    df = pd.read_csv(zf.open(text_file.filename)
    # do df manipulations if required
    df.to_csv(curDir + '/targetfolder/' + text_file.filename + '.csv')

# df = pd.concat(list_)

Это позволит перебрать все файлы и загрузить их с соответствующими именами, присутствующими в zip-файле.

...