我在python中編寫一個腳本來搜索字符串,並且在遇到字符串時suposedly會做不同的事情。在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 2007年6月9日A825 B825 2007年6月9日A434 B434 06/05/2010 A826 B826
什麼,我想是如果我有date.today()之後的日期表示像27/01/2016寫入另一個文件和w我一直得到的帽子是打印此列表的腳本的30倍或不考慮if語句的腳本。
(對不起,如果該確實縮進的最後一個循環,而把它在這裏,我去錯了)
這不就是for語句最後4行的縮進問題嗎? endDate變量不斷變化,但沒有任何反應,直到它在嵌套區域的最後一次迭代中發生,然後纔開始寫入。所以你不考慮findDat中的所有其他日期。 此外,您可能要添加寫日期對象 'f.write(東西+ '\ r \ n')' \ r \ n =輸入後進入。 – Azeirah
@azeirah:除非你只想讓你的代碼在Windows上工作,否則不要寫'\ r \ n'。只需編寫'\ n',讓Python的文本/通用換行符模式爲您處理平臺差異問題。 – abarnert
如果你想添加2年,爲什麼不是年= 2而不是天= 731?後者只有在閏年邊界時纔有效。它的可讀性較差 - 你必須停下來思考731天的含義。 – abarnert