很多類似于日志這樣的文件中都有時(shí)間字段幸乒。有時(shí)候,我們希望取出某一時(shí)間段的數(shù)據(jù)。
例如這個(gè)文件:
[root@myvm untitled]# cat myfile.txt
2019-05-15 08:10:01 aaaa
2019-05-15 08:32:00 bbbb
2019-05-15 09:01:02 cccc
2019-05-15 09:28:23 dddd
2019-05-15 10:42:58 eeee
2019-05-15 11:08:00 ffff
2019-05-15 12:35:03 gggg
2019-05-15 13:13:24 hhhh
我們想要得到9:00到12:00之間的數(shù)據(jù)辛馆。
觀察文件,發(fā)現(xiàn)其特點(diǎn)是前19個(gè)字符是時(shí)間豁延,只要將這部分?jǐn)?shù)據(jù)轉(zhuǎn)換成相應(yīng)的時(shí)間對(duì)象昙篙,判斷它是否介于9:00到12:00之間即可:
[root@myvm untitled]# cat cut_file.py
import time
fname = 'myfile.txt'
t9 = time.strptime('2019-5-15 09:00:00', '%Y-%m-%d %H:%M:%S')
t12 = time.strptime('2019-5-15 12:00:00', '%Y-%m-%d %H:%M:%S')
with open(fname) as fobj:
for line in fobj:
t = time.strptime(line[:19], '%Y-%m-%d %H:%M:%S')
if t9 < t < t12:
print(line, end='')
這是我們很容易直接想到的,但是如果文件有上萬行诱咏,滿足條件的時(shí)間只出現(xiàn)在前100行以內(nèi)呢苔可?按上面的寫法,文件中所有的行都要遍歷一遍袋狞,這完全沒有必要焚辅。如果在不滿足條件時(shí),及時(shí)將循環(huán)中斷苟鸯,可以大大地提升程序的運(yùn)行效率同蜻。所以,更好的寫法如下:
[root@myvm untitled]# cat cut_file.py
import time
fname = 'myfile.txt'
t9 = time.strptime('2019-5-15 09:00:00', '%Y-%m-%d %H:%M:%S')
t12 = time.strptime('2019-5-15 12:00:00', '%Y-%m-%d %H:%M:%S')
with open(fname) as fobj:
for line in fobj:
t = time.strptime(line[:19], '%Y-%m-%d %H:%M:%S')
if t > t12:
break
if t > t9:
print(line, end='')
[root@myvm untitled]# python3 cut_file.py
2019-05-15 09:01:02 cccc
2019-05-15 09:28:23 dddd
2019-05-15 10:42:58 eeee
2019-05-15 11:08:00 ffff