我正在用python编写一个脚本来搜索字符串,并且在遇到字符串时可能会做不同的事情。
import re, datetime
from datetime import *
f = open(raw_input('Name of file to search: ')
strToSearch = ''
for line in f:
strToSearch += line
patFinder = re.compile('\d{2}\/\d{2}\/\d{4}\sA\d{3}\sB\d{3}')
findPat1 = re.findall(patFinder, strToSearch)
# search only dates
datFinder = re.compile('\d{2}\/\d{2}\/\d{4}')
findDat = re.findall(datFinder, strToSearch)
nowDate = date.today()
fileLst = open('cels.txt', 'w')
ntrdLst = open('not_ready.txt', 'w')
for i in findPat1:
for Date in findDat:
Date = datetime.strptime(Date, '%d/%m/%Y')
Date = Date.date()
endDate = Date + timedelta(days=731)
if endDate < nowDate:
fileLst.write(i)
else:
ntrdLst.write(i)
f.close()
fileLst.close()
ntrdLst.close()
toClose = raw_input('File was modified, press enter to close: ')
所以基本上它搜索一个包含日期和数字的字符串,然后搜索相同的列表,但只有日期,转换日期,每个添加 2 年,如果日期超过今天的日期,则比较到 ntrdLst,如果不是,到 fileLst。
我的问题是它多次写入相同的列表(i)并且不进行排序。
我对 python 和编程非常陌生,所以我请求你的帮助。提前致谢
编辑: - - - - - - - - -
正常输出是这样的(没有日期和 if 语句)
27/01/2009 A448 B448 22/10/2001 A434 B434 06/09/2007 A825 B825 06/09/2007 A434 B434 06/05/2010 A826 B826
我想要的是,如果我有一个在 date.today() 之后的日期,比如 27/01/2016 写入另一个文件,而我不断得到的是脚本打印此列表 30 次或不考虑if 语句。
(抱歉,if 确实在最后一个循环中缩进了,我把它放在这里时出错了)