gpt4 book ai didi

python - 在 python 中将随机字符串转换为日期会引发组名 'm' 的重新定义

转载 作者:行者123 更新时间:2023-12-01 23:07:10 24 4
gpt4 key购买 nike

我一直在尝试解析一些非常旧的数据来构建它们并将它们存储在数据库中。我有一些包含日期的随机字符串。
YEAR:1999 DATE:09/1999DATE:09/1996DATE:1993YEAR:2006 DATE:15/05/06YEAR:2019 DATE:JANUARY 3, 2019YEAR:2019 DATE:FEB. 14, 2019YEAR:2019 DATE: 30/06/2019, JUNE 24, 2019
正如你所看到的,有很多可能性。
我已经尝试使用 datetime、dateutil、dateparser 和 timefhuman 来快速从中获取日期。
没有,他们中有一个想要的输出。
我获得的最大成功是使用 dateparser。

    recieving_date = str(row[8])
try:
print (recieving_date)
recieving_date = str(recieving_date.replace("DATE", ''))
recieving_date = str(recieving_date.replace("YEAR", ''))
recieving_date = str(recieving_date.replace(":", ''))
print(recieving_date)
recieving_date = dateparser.parse(recieving_date, date_formats=["%Y%d/%m/%y", "%Y", "%Y%m/%y" '%d/%m/%Y'])
print (recieving_date)
except Exception as e:
print(e)

我收到一个错误 将组名“m”重新定义为组 5;是第 99 组的第 2 组
关于如何进行的任何建议。我想过读取每个字符,看看是否有日期关键字。这听起来有点过分了。一定有更好的方法?

最佳答案

对于您提供的格式,这是一个非常冗长的解析器。输出以 [年、月、日] 列表的形式给出,其中每个条目仅在日期中找到时才存在。

import datetime
dates = ['YEAR:1999 DATE:09/1999',
'DATE:09/1996',
'DATE:1993 ',
'YEAR:2006 DATE:15/05/06 ',
'YEAR:2019 DATE:JANUARY 3, 2019',
'YEAR:2019 DATE:FEB. 14, 2019 ',
'YEAR:2019 DATE: 30/06/2019']
output = []
for date in dates:
year = None
# getting the year from the 'YEAR:' key.
if 'YEAR' in date:
year = int(date.split(' ',1)[0].replace('YEAR:','').strip())
date = date.split(' ',1)[1].strip()
#Some string cleaning
date = date.replace('DATE:','')
date = date.replace('/',' ').strip().replace(',',' ')
date = date.split()
if year is None:
year = int(date[-1])
date = date[0:-1]
if len(date)==0:
output.append([year])
continue
elif len(date)==1:
month = int(date[0])
output.append([year, month])
continue
else:
try:
day = int(date[0])
month = int(date[1])
output.append([year, month, day])
except ValueError:
day = int(date[1])
#Getting month number from name
month = datetime.datetime.strptime(date[0][0:3], '%b').month
output.append([year, month, day])

print(output)

更新 :

可以使用 dateparser 到达某个地方。对于您的输入,代码如下所示:
import dateparser
dates = ['YEAR:1999 DATE:09/1999',
'DATE:09/1996',
'DATE:1993 ',
'YEAR:2006 DATE:15/05/06 ',
'YEAR:2019 DATE:JANUARY 3, 2019',
'YEAR:2019 DATE:FEB. 14, 2019 ',
'YEAR:2019 DATE: 30/06/2019']

for date in dates:
if 'YEAR' in date:
date = date.split(' ',1)[1].strip()
date = date.replace('DATE:','').strip()
parsed_date = dateparser.parse(date,
date_formats=['%m/%Y', '%Y', '%d/%m/%Y', ],
languages = ['en'])
print(parsed_date)

但是如您所见,将添加月、日和时间,这些都未在输入中给出。

关于python - 在 python 中将随机字符串转换为日期会引发组名 'm' 的重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com