我有一些串行通信日志可以分析时间,因此我以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
条件有问题吗?还是有另一种方法检查字符串的最后一个字符(如果它是列表元素)?
答案 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)