#python-3.x #excel #pandas #date
#python-3.x #excel #pandas #Дата
Вопрос:
У меня ситуация, в которой я хотел бы ежедневно читать файл Excel, где имя файла записано в следующем формате: file_name 08.20.2018 xyz.xlsx
и обновляется ежедневно, где дата меняется ежедневно.
То же самое, что мне нужно сделать, когда этот файл читается, мне нужно извлечь данные из листа, соглашение об именовании которого также меняется ежедневно в зависимости от даты. Примером названия листа является sheet1-08.20.2020-data
Как я должен этого добиться? Я использую следующий код, но он не работает:
df = pd.read_Excel(r'file_name 08.20.2018 xyz.xlsx', sheet_name = 'sheet1-08.20.2020-data')
как мне обновить эту строку кода, чтобы она ежедневно динамически выбирала данные с поступлением новых дат. И чтобы было понятно, дата также будет инкрементной без пробелов.
Ответ №1:
Вы могли бы использовать pathlib
и datetime
модуль для автоматизации процесса :
from pathlib import Path
from datetime import date
#assuming you have a directory of files:
folder = Path(directory of files)
sheetname = f"sheet1-0{date.today().month}.{date.today().day}.{date.today().year}-data"
date_string = f"filename 0{date.today().month}.{date.today().day}.{date.today().year}.xlsx"
xlsx_file = folder.glob(date_string)
#read in data
df = pd.read_excel(io=next(xlsx_file), sheet_name = sheetname)
Комментарии:
1. получение следующей ошибки NameError: имя ‘Pathlib’ не определено. Я заменил путь импорта из pathlib на import pathlib. Я все еще получаю эту ошибку.
2. это нормально, но теперь, если я запускаю его снова, я сталкиваюсь с ошибкой остановки при чтении файла Excel в этой строке df = pd.read_excel(io = next(xlsx_file), sheet_name = sheetname). Я думаю, что знаю причину. Моя дата находится в форме 08.20.2020, тогда как datae_String она считывается как 8.20.2020. Как я должен отформатировать это, чтобы сделать его похожим? а также как я мог бы получить предыдущую дату? например, 19.08.2020?
3. если вы посмотрите на код, которым я поделился, вы увидите, что я поставил 0 перед
date.today.month
, поэтому он не должен выдавать вам эту ошибку. Вы можете проверить вывод date_string и посмотреть, совпадает ли он. В любом случае вам придется изменить код в соответствии с вашими потребностями. Для предыдущей даты вы могли бы вычесть 1 из даты. Модуль datetime — ваш друг для этого