如何打开因日期更改而每天都有不同名称的文件

时间:2019-12-04 21:06:25

标签: python csv

我正在致力于向协作者报告的自动化。

我通过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文件名。

如果我在此帖子或问题中有任何错误,请指出,我将尽最大努力避免这种情况。

1 个答案:

答案 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')