我有一个日志文件file.txt
,日期格式为'%b %_d %H:%M:%S'
。
当月份的日期在1日到9日之间时,它会用空格填充场地。
我只是想知道我的代码是否是检查这是否包含空格的最佳方式,因为我只想从每一行中提取日期/时间
file.txt的
Sep 8 16:13:02 blah
Sep 8 16:14:02 blahblah
Sep 8 16:15:02 blablahblah
代码:
with open('file.txt','r') as f:
for line in f:
if int(line.split()[1]) < 10:
d = line.split()[0] + ' ' + line.split()[1] + ' ' + line.split()[2] #double space after [0]
else:
d = line.split()[0] + ' ' + line.split()[1] + ' ' + line.split()[2] #single space after [0]
print d
答案 0 :(得分:1)
如果希望用空格填充输出字段,可以使用python string formatting spec。
>>> for line in 'Sep 8 16:13:02 blah', 'Sep 12 16:13:02 blah':
>>> print('{0} {1:>2} {2}'.format(*line.split()))
Sep 8 16:13:02
Sep 12 16:13:02
{1:>2}
表示字段1应右对齐且至少2个字符宽。缺少的字符将用空格填充。
在python 3.6+中,您还可以使用f-strings使其更加不言自明。
>>> for line in 'Sep 8 16:13:02 blah', 'Sep 12 16:13:02 blah blah blah':
>>> month, date, time, *rest = line.split()
>>> print(f'date: {month} {date:>2} {time}\ncomment: {" ".join(rest)}')
date: Sep 8 16:13:02
comment: blah
date: Sep 12 16:13:02
comment: blah blah blah
答案 1 :(得分:0)
基于jedwards的评论:
from datetime import datetime
f = '''Sep 8 16:13:02 blah
Sep 8 16:14:02 blahblah
Sep 8 16:15:02 blablahblah'''.splitlines()
for line in f:
d = datetime.strptime(line[:15], '%b %d %H:%M:%S')
print(d)
输出:
1900-09-08 16:13:02
1900-09-08 16:14:02
1900-09-08 16:15:02