繁体   English   中英

如何过滤包含日期的字符串列表

[英]how to filter a list of string that contains dates

我在python中生成了一个动态列表,如何过滤该列表以仅显示dates > 20190612的文件

"PUBLIC_DAILY_201906150000_20190616040503.zip"
"PUBLIC_DAILY_201906110000_20190612040501.zip"
"PUBLIC_DAILY_201906120000_20190613040503.zip"
"PUBLIC_DAILY_201906100000_20190611040501.zip"
"PUBLIC_DAILY_201906130000_20190614040503.zip"

结果将是这些项目的列表

"PUBLIC_DAILY_201906130000_20190614040503.zip"
"PUBLIC_DAILY_201906150000_20190616040503.zip"

谢谢

我们可以尝试在子字符串的帮助下进行过滤:

# list input
output = list(filter(lambda x: x[13:21] > '20190612', input))
print(output)

['PUBLIC_DAILY_201906150000_20190616040503.zip',
 'PUBLIC_DAILY_201906130000_20190614040503.zip']

实际上,这会采用第一个日期的子字符串,然后将其与另一个字符串日期进行比较。 因为这里涉及的所有日期都是固定宽度,所以我们在这里进行了字符串比较。 最佳做法可能是将所有文本字符串转换为真实日期,然后进行比较。

尝试:

[i for i in lst if i > "PUBLIC_DAILY_20190612000"]

您也可以尝试类似的方法。

通常最好先将字符串转换为日期。

archives = ["PUBLIC_DAILY_201906150000_20190616040503.zip",
"PUBLIC_DAILY_201906110000_20190612040501.zip",
"PUBLIC_DAILY_201906120000_20190613040503.zip",
"PUBLIC_DAILY_201906100000_20190611040501.zip",
"PUBLIC_DAILY_201906130000_20190614040503.zip"]

date_regex = "%Y%m%d%H%M%S"
default_regex = "%Y%m%d"
default_date = "20190612"
compare_date = datetime.datetime.strptime(default_date,default_regex)
passed_list = []

for archive in archives:
    split_str = archive.split("_")
    print split_str

    date1 = datetime.datetime.strptime(split_str[2],date_regex)
    date2 = datetime.datetime.strptime(split_str[3].split(".")[0],date_regex)
    if date1 > compare_date and date2 > compare_date:
        passed_list.append(archive)

print passed_list
import datetime
import re

lst = ["PUBLIC_DAILY_201906150000_20190616040503.zip",
"PUBLIC_DAILY_201906110000_20190612040501.zip",
"PUBLIC_DAILY_201906120000_20190613040503.zip",
"PUBLIC_DAILY_201906100000_20190611040501.zip",
"PUBLIC_DAILY_201906130000_20190614040503.zip"]

d = datetime.datetime(year=2019, month=6, day=12)

l = [l for l in lst for g in re.findall(r'PUBLIC_DAILY_(\d{4})(\d{2})(\d{2})', l) if datetime.datetime.strptime(''.join(g), '%Y%m%d') > d]
print(l)

印刷品:

['PUBLIC_DAILY_201906150000_20190616040503.zip', 'PUBLIC_DAILY_201906130000_20190614040503.zip']

您可以简单地将字符串切成薄片并将其转换为int,然后将其与您各自的日期数据进行比较= [“ PUBLIC_DAILY_201906150000_20190616040503.zip”,“ PUBLIC_DAILY_201906110000_20190612040501.zip”,“ PUBLIC_DAILY_201906120000_2019061302019503_140_140_2019_2019_140_40300 “]

for i in range(len(data)):
    date=int(data[i][13:21])
    if date>20190612:
    print(data[i])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM