我有一个下面的文本文件:demo.txt
,其中包含日期文件夹名称
需要识别丢失的日期文件夹
下面是我的日期文件夹:
20210901
20210902
20210903
20210906
20210907
20210908
20210909
202109010
202109012
202109013
202109015
202109017
202109018
202109019
如果您仔细观察日期文件夹20210904
和20210905
等丢失,则需要将这些文件夹名称打印为输出
预期输出:
20210904
20210905
20210911
20210914
20210916
My code:
listItems=[]
f = open(demo.txt, "r")
listItems = f.read().splitlines()
cunt=count(listItems)
for i in range(cunt):
for i in list:
if i == substr(list,1,3):
print('present')
else:
print(list[i])
您应该遍历文件并从每行创建datetime
对象。您可以使用datetime.strptime()
格式"%Y%m0%d"
来将字符串解析为datetime
对象。然后计算日期之间的差异,如果超过1天,则使用strftime()
启动循环,使用"%Y%m%d"
:
from datetime import datetime, timedelta
with open("demo.txt") as f:
prev_date = None
for line in f:
curr_date = datetime.strptime(line.rstrip(), "%Y%m0%d")
if prev_date:
for i in range(1, (curr_date - prev_date).days):
print((prev_date + timedelta(days=i)).strftime("%Y%m%d"))
prev_date = curr_date
如下所示(想法是将字符串转换为日期,查找min &Max,在min和Max之间循环并找到"洞">
from datetime import datetime,timedelta
dates_str = ['20210905','20210904','20210905','20210911','20210913']
dates = [datetime. strptime(d, '%Y%m%d') for d in dates_str]
_min = min(dates)
_max = max(dates)
missing = []
while _min < _max:
_min += timedelta(days=1)
if _min not in dates:
missing.append(_min)
print(missing)
输出[datetime.datetime(2021, 9, 6, 0, 0), datetime.datetime(2021, 9, 7, 0, 0), datetime.datetime(2021, 9, 8, 0, 0), datetime.datetime(2021, 9, 9, 0, 0), datetime.datetime(2021, 9, 10, 0, 0), datetime.datetime(2021, 9, 12, 0, 0)]