gpt4 book ai didi

python - 使用python从gmail下载一个csv文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:26 25 4
gpt4 key购买 nike

我尝试使用不同的 Python 脚本从 Gmail 下载 CSV 附件。但是我无法得到它。这可能吗?如果可能的话,我应该使用哪个 python 脚本?谢谢。

最佳答案

长话短说

  • 我整理了a Github repo这使得从 Gmail 获取 CSV 数据变得非常简单:

    from gmail import *
    service = get_gmail_service()

    # get all attachments from e-mails containing 'test'
    search_query = "test"
    service = get_gmail_service()
    csv_dfs = query_for_csv_attachments(service, search_query)
    print(csv_dfs)
  • 按照 README 中的说明进行操作,随时贡献力量!

长答案(直接使用 google-api-python-clientoauth2client)

  • Follow this link然后单击按钮:“启用 GMAIL API”。设置完成后,您将下载一个名为 credentials.json 的文件。
  • 安装所需的 Python 包:

    pip install --upgrade google-api-python-client oauth2client
  • 以下代码将允许您通过 Python 连接到您的 Gmail 帐户:

    from googleapiclient.discovery import build
    from httplib2 import Http
    from oauth2client import file, client, tools

    GMAIL_CREDENTIALS_PATH = 'credentials.json' # downloaded
    GMAIL_TOKEN_PATH = 'token.json' # this will be created

    store = file.Storage(GMAIL_TOKEN_PATH)
    creds = store.get()
    if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets(GMAIL_CREDENTIALS_PATH, SCOPES)
    creds = tools.run_flow(flow, store)
    service = build('gmail', 'v1', http=creds.authorize(Http()))
  • 使用此服务,您可以阅读您的电子邮件和任何附件。

  • 首先,您可以使用搜索字符串查询您的电子邮件,以查找包含附件的电子邮件 ID:

    search_query = "ABCD"
    result = service.users().messages().list(userId='me', q=search_query).execute()
    msgs = results['messages']
    msg_ids = [msg['id'] for msg in msgs]
  • 对于每个 messageId,您都可以在电子邮件中找到关联的附件。

  • 这部分有点乱,请耐心等待。首先,我们获得“附件部分”(和附件文件名)的列表。这些是包含附件的电子邮件的组成部分:

    messageId = 'XYZ'
    msg = service.users().messages().get(userId='me', id=messageId).execute()
    parts = msg.get('payload').get('parts')
    all_parts = []
    for p in parts:
    if p.get('parts'):
    all_parts.extend(p.get('parts'))
    else:
    all_parts.append(p)

    att_parts = [p for p in all_parts if p['mimeType']=='text/csv']
    filenames = [p['filename'] for p in att_parts]
  • 现在我们可以从每个部分获取附加的 CSV:

    messageId = 'XYZ'
    data = part['body'].get('data')
    attachmentId = part['body'].get('attachmentId')
    if not data:
    att = service.users().messages().attachments().get(
    userId='me', id=attachmentId, messageId=messageId).execute()
    data = att['data']
  • 现在您有了 CSV 数据,但它是编码格式,所以我们更改编码并将结果转换为 Pandas 数据帧:

    import base64
    import pandas as pd
    from StringIO import StringIO
    str_csv = base64.urlsafe_b64decode(data.encode('UTF-8'))
    df = pd.read_csv(StringIO(str_csv))
  • 就是这样!您有一个包含 CSV 附件内容的 Pandas 数据框。如果您只是想下载它,您可以使用此数据框或使用 pd.DataFrame.to_csv 将其写入磁盘。如果您想保留文件名,可以使用之前获得的文件名列表。

关于python - 使用python从gmail下载一个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com