gpt4 book ai didi

Python dateutil 解析器,忽略字符串的非日期部分

转载 作者:太空狗 更新时间:2023-10-29 23:59:38 26 4
gpt4 key购买 nike

我正在使用 dateutil 来解析图片文件名并根据日期对它们进行排序。由于并非我所有的图片都有元数据,dateutil 正在尝试猜测将它们放在哪里。

我的大部分图片都是这种格式:2007-09-10_0001.jpg2007-09-10_0002.jpg等等……

fileName = os.path.splitext(file)[0]
print("Guesssing date from ", fileName)
try:
dateString = dateParser.parse(file, fuzzy=True)
print("Guessed date", dateString)
year=dateString.year
month = dateString.month
day=dateString.day
except ValueError:
print("Unable to determine date of ", file)

我得到的返回是这样的:

('Guesssing date from ', '2007-09-10_00005')
('Unable to determine date of ', '2007-09-10_00005.jpg')

现在我应该能够去除下划线后的所有内容,但如果可能的话,我想要一个更强大的解决方案,以防我有其他格式的图片。我虽然模糊会尝试在字符串中找到任何日期并与之匹配,但显然不起作用......

有没有一种简单的方法可以让解析器找到任何看起来像日期的东西并在之后停止?如果不是,强制解析器忽略下划线后的所有内容的最简单方法是什么?或者用忽略部分定义多种日期格式的方法。

谢谢!

最佳答案

你可以尝试“减少”字符串,只要你不能解码它:

from dateutil import parser

def reduce_string(string):
i = len(string) - 1
while string[i] >= '0' and string[i] < '9':
i -= 1
while string[i] < '0' or string[i] > '9':
i -= 1
return string[:i + 1]

def find_date(string):
while string:
try:
dateString = parser.parse(string, fuzzy=True)
year = dateString.year
month = dateString.month
day = dateString.day
return (year, month, day)
except ValueError:
pass

string = reduce_string(string)

return None

date = find_date('2007-09-10_00005')
if date:
print date
else:
print "can't decode"

想法是删除字符串的末尾(任何数字,然后是任何非数字),直到解析器可以将其解码为有效日期。

关于Python dateutil 解析器,忽略字符串的非日期部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011735/

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