我正在致力于向协作者报告的自动化。
我通过API使用以下代码提取报告:
代码
import requests
from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
app_id = 'myappid'
report_type = 'daily_report'
params = {
'api_token': 'api_token',
'from': yesterday,
'to': yesterday
}
request_url = 'https://domainxyz.com/export/{}/{}/v5'.format(app_id, report_type)
res = requests.request('GET', request_url, params=params)
if res.status_code != 200:
if res.status_code == 404:
print('There is a problem with the request URL. Make sure that it is correct')
else:
print('There was a problem retrieving data: ', res.text)
else:
f = open('{}-{}-{}-to-{}.csv'.format(app_id, report_type, params['from'], params['to']), 'w', newline='', encoding="utf-8")
f.write(res.text)
f.close()
,代码将文件另存为'myappid-daily_report-yesterdayDate-to-yesterdayDate.csv
,而且效果很好。 有了昨天的数据后,我想打开csv文件并对Pandas进行一些修改,但是在此之前,我需要打开每天都有动态名称的CSV文件。
我将使用以下文件
打开文件import csv
from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
app_id = 'myappid'
report_type = 'daily_report'
params = {
'from': yesterday,
'to': yesterday
}
csv_file = ('{}-{}-{}-to-{}'.format(app_id, report_type, params['from'], params['to']))
print (csv_file)
with open('csv_file' +'.csv', 'r') as csvfile:
打印功能返回了正确的名称,但是我收到一条错误消息:
Traceback (most recent call last):
File "C:/Users/Iwan/PycharmProjects/Learning/csv_mods.py", line 20, in <module>
with open('csv_file' +'.csv', 'r') as csvfile:
FileNotFoundError: [Errno 2] No such file or directory: 'csv_file.csv'
因此,我想知道如何每天注入* .csv而不是手动键入csv文件名。
如果我在此帖子或问题中有任何错误,请指出,我将尽最大努力避免这种情况。
答案 0 :(得分:0)
必须进行两项更改,这些更改会立即对我产生影响。
首先,您尝试使用变量csv_file
定义的名称打开文件,但是您将变量名称用open()
语句括在引号中。
with open('csv_file' +'.csv', 'r') as csvfile:
删除csv_file
周围的引号,以便它使用变量csv_file
的值,而不仅仅是文字字符串'csv_file'
:
with open(csv_file + '.csv', 'r') as csvfile:
第二,您几乎肯定会想更改datetime
字符串的格式化方式,因为yesterday
只是一个datetime.datetime
对象,因此它的字符串表示形式看起来很像'2019-12-04 16:21:36.731000'
,这不是放在文件名中的很好的字符串。
我猜测您的文件名将需要使用日期格式为YYYYMMDD
之类的日期,但是由于您没有给我们提供该信息,因此没有太多内容可做。假设这种情况,您可以使用yesterday
将获取datetime.datetime
的值的方式更改为从datetime.datetime.strftime()
对象格式化的字符串:
yesterday = (today - timedelta(days = 1)).strftime('%Y%m%d')