0

所以这里已经回答了这个问题: 将 datefinder 的输出放入列表 不幸的是,我的代表太低了,所以我无法评论以弄清为什么它没有按预期运行。我想获取文件名字符串并将它们转换为日期列表,以便我可以将它们用作日期列的填充。所有文件名都包含活动日期,但它们本身不在工作表上。格式为: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"))

我没有得到转换的对象,而是得到以下错误:AttributeError:

'generator' object has no attribute 'strftime'

当我尝试将其直接转换为列表时

date_list = list(event_dates)
print(event_dates)

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

<generator object <genexpr> at 0x00000230571AE660>

我需要更改什么,以便它实际上成为一个日期时间列表,我可以使用它来通过前向填充填充附加的“日期”列?

4

2 回答 2

0

您的代码不起作用,因为find_dates返回的生成器和事件日期包含生成器列表。它可以与以下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)
于 2019-09-04T20:18:56.007 回答
0

最终通过进行以下更改使其工作:

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 列表,可以根据需要将其用于我需要构建的前向日期列、索引等。

于 2019-09-05T01:27:47.193 回答