У меня есть несколько журналов последовательной связи для анализа времени, поэтому я записываю сообщения с отметками времени в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.ffffff: Итак, мой файл выглядит так:
YYYY-MM-DD HH:MM:SS.ffffff:
few lines of bytes
YYYY-MM-DD HH:MM:SS.ffffff:
and so on...
Я хочу извлечь даты из своего файла, чтобы рассчитать время между сообщениями.
Я хочу работать с датами, используя модуль 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
состоянием? Или есть другой способ проверить последний символ строки, если это элемент списка?
Это должно сработать, если нет, то ваши строки, вероятно, не заканчиваются на :
.
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)
Вам нужно удалить новую строку из каждой строки файла.
Попробуйте заменить
lines=(f.readlines())
с участием
lines=[l.strip() for l in f.readlines()]
Лучший способ найти метку времени в строке
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)
Вы также должны вставить несколько строк из sniffinglog.txt.