我正在从gmail下载csv附件,这些附件是csv报告。我使用的是python3.6.1和oauth2.0gmailapi。你知道吗
csv文件中有一个日期列,我硬编码它的格式为“%Y-%m-%d”。你知道吗
当我下载csv附件并将其作为文本文件进行检查时,大多数情况下,我得到的预期日期格式如下(前2行的前3列)-
"date","advertiser","advertiser_id", ...
"2017-05-27","Swiss.com India (UK)","29805", ...
但是,有时csv文件中的引号会丢失-然后我会得到-
date,advertiser,advertiser_id, ...
27/05/2017,Swiss.com India (UK),29805, ...
在这种情况下,日期模式变成了“%d/%m/%Y”。你知道吗
在下载文件时,并没有可辨别的模式和不带引号的日期。大多数情况下,如果我删除下载的文件并重新运行脚本,引用的附件将被重新下载。你知道吗
有没有办法设置附件下载,以便以引用的格式下载日期列?或者有没有办法确保当我读取csv时(使用csv.reader文件)我总是以某种格式获取日期列?你知道吗
这里给出了我下载附件的具体方法-
https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get(Python版本)。确切的代码片段是-
# Get the body of this part and it's keys.
part_body = part['body']
part_body_keys = part_body.keys()
...
if 'data' in part_body_keys:
a_data = part_body['data']
elif 'attachmentId' in part_body_keys:
att_id = part_body['attachmentId']
att = service.users().messages().attachments().get(
userId=user_id, messageId=message['id'],
id=att_id).execute()
a_data=att['data']
else:
...
# Encode it appropriately and write it to the file.
file_data = base64.urlsafe_b64decode(a_data.encode('UTF-8'))
...
f = open(file_name, 'wb')
f.write(file_data)
f.close()
读取csv文件时的代码段为-
infile = open(file_name, mode="r", encoding='ascii', errors='ignore')
filereader = csv.reader(infile)
date_fmt = "%Y-%m-%d"
…
for a_row in filereader:
…
try:
rf_datetime = time.strptime(a_row[0], date_fmt)
…
任何指点都将不胜感激!这个脚本已经成为我的业务的一个关键组件,它自动化了我们的报告过程,并且明显地减少了所有方面的工作量。你知道吗
敬礼
镍钛
看起来附加的csv文件本身的格式不同(或者
'data'
和'attachmentId'
之间可能有差异?)。你知道吗当然,您可以手动下载它们并在文本编辑器中检查它们。你知道吗
至于引号:对于csv来说,字段是否被引用并没有什么区别。只有当字段包含字段分隔符时,才需要用引号括起来。但既然你使用的是csv阅读器,这就不重要了。你知道吗
至于日期,在读取循环之前检查一次日期格式(在第一个数据行中),并相应地设置
date_fmt
(用于解析)可能是最简单的。你知道吗相关问题 更多 >
编程相关推荐