如何将 datefinder 输出转换为列表?

How do I turn datefinder output into a list?

所以这里已经回答了这个问题: 不幸的是,我的代表太低了,所以我无法评论以弄清楚为什么它没有按预期运行。我想获取文件名字符串并将它们转换为日期列表,以便我可以将它们用作日期列的填充。所有文件名都包含事件日期,但它们不在表格本身上。 格式为:CompanyNameEventLocationDDMMYYYY.xlsx

import glob
import datefinder
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames
event_dates = (datefinder.find_dates(f) for f in filename)
#check output
for days in event_dates:
    print(days.strftime("%Y-%m-%d %H:%M:%S"))

我没有获取转换后的对象,而是收到以下错误: 属性错误:

'generator' object has no attribute 'strftime'

当我尝试使用

将其直接转换为列表时
date_list = list(event_dates)
print(event_dates)

我仍然得到输出说它仍然是一个生成器对象:

<generator object <genexpr> at 0x00000230571AE660>

我需要更改什么才能使它真正成为一个日期时间列表,我可以使用它来通过前向填充来填充附加的 'Date' 列?

您的代码不起作用,因为 find_dates returns 您的生成器和事件日期包含一个生成器列表。它可以与 chain.from_iterable 一起使用,如下所示

import glob
import datefinder
from itertools import chain
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames
event_dates = (datefinder.find_dates(f) for f in filename)
#check output
for days in chain.from_iterable(event_dates):
    print(days.strftime("%Y-%m-%d %H:%M:%S"))

但我尝试在具有您的格式的文件名上使用日期查找器,但效果不佳。我认为它不是为此设计的。

event_dates = datefinder.find_dates('afilename_01-08-2019.xls')
for match in event_dates:
    print(match)
event_dates = datefinder.find_dates('afilename01082019.xls')
for match in event_dates:
    print(match)

之前的代码打印:

2019-01-08 00:00:00

如果您的格式始终是 CompanyNameEventLocationDDMMYYYY.xlsx,您应该解析日、月和年数字并将它们提供给一个 date 对象:

import datetime
import glob
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filenames = glob.glob(path)

for filename in filenames:
    full_date = filename.split('.')[0]
    day, month, year = full_date[-8:-6], full_date[-6:-4], full_date[-4:]
    real_date = datetime.date(int(year), int(month), int(day))
    print(real_date)

最终通过进行这些更改使其正常工作:

import pandas as pd
import glob
import datefinder
from datetime import datetime
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames and convert to datetime objects
event_dates = (datefinder.find_dates(f) for f in filename)
event_dates_dto = []
for dates in event_dates:
    event_dates_dto.append(pd.to_datetime(list(dates)))
#check output
print(event_dates_dto)

这现在创建了一个从每个文件名中提取的 DateTimeIndexes 列表,可以根据需要用于我需要构建的远期日期列、索引等。