Python:在日期

时间:2017-09-09 09:33:59

标签: python datetime

我有一个日志文件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

2 个答案:

答案 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