检查列表中字符串的最后一个元素

时间:2019-05-27 12:07:04

标签: python

我有一些串行通信日志可以分析时间,因此我以YYYY-MM-DD HH:MM:SS.ffffff格式记录带有时间戳的消息: 所以我的文件看起来像这样:

  

YYYY-MM-DD HH:MM:SS.ffffff:

     

几行字节

     

YYYY-MM-DD HH:MM:SS.ffffff:

     

以此类推...

我想从文件中提取日期,以便计算邮件之间的时间

我想使用datetime模块对日期进行运算,并且一开始我想在每个日期的末尾消除冒号。我已经阅读了文件,并将其保存在变量中,该变量是字符串列表,每个元素都是一行。现在,我想创建仅包含日期的第二个列表,仅提取那些以冒号结尾的行。

f=open("sniffinglog.txt","r")

lines=(f.readlines())
lines_number=len(lines)
i=0
dates=[]
while i<lines_number:
    if lines[i].endswith(":"):
        dates.append(lines[i])
    i+=1 
print (dates)

我检查了lines的创建是否正确,但是列表dates上没有任何元素。它仍然是空的。我的if条件有问题吗?还是有另一种方法检查字符串的最后一个字符(如果它是列表元素)?

3 个答案:

答案 0 :(得分:0)

这应该可以,如果不能,那么您的行可能不会以:结尾。

with open("sniffinglog.txt", "r") as f:
    content = f.readlines()

dates = []
for line in content:
    if line.strip().endswith(":"):
        dates.append(line.rstrip(":"))

print(dates)

答案 1 :(得分:0)

您需要从文件的每一行中删除新行。

尝试更换

lines=(f.readlines())

使用

lines=[l.strip() for l in f.readlines()]

答案 2 :(得分:0)

一种更好的在线找到时间戳的方法

f=open("sniffinglog.txt","r")

lines=(f.readlines())
lines_number=len(lines)
i=0
dates=[]
while i<lines_number:
    # Check if line is a timestamp.
    if time.strptime(line[:19], '%Y-%m-%d %H:%M:%S'):
        dates.append(lines[i])
    i+=1 
print (dates)