Я использовал следующий формат, который читается из файла журнала. Используемый форматтер соответствует формату DateTime. не уверен, почему это все еще ошибка. - ValueError: данные времени "2018-01-01 10:00:00" "не соответствует формату"% Y-% m-% d% H:% M:% S '
f = open("log.txt", 'w')
f.write("UID, SID, LogTime\n")
f.write("1, 1, '2018-01-01 10:00:00'\n")
f.write("1, 1, '2018-01-01 10:30:00'\n")
f.write("1, 1, '2018-01-01 11:30:00'\n")
f.close()
x = open("log.txt", 'r')
print (x.read())
x.close()
import numpy as np
from datetime import datetime
a = open("log.txt", 'r+')
temp = None
header = a.readline()
for line in a:
line = line.strip()
columns = line.split(',')
print (columns)
UID = columns[0]
SID = columns[1]
print (columns[2])
LogTime = datetime.strptime(columns[2],"%Y-%m-%d %H:%M:%S")
a.write(','+LogTime-temp)
temp = LogTime
Проблема в том, что в вашем формате есть цитаты вокруг времени, а также ведущее пространство:
f.write("1, 1, '2018-01-01 10:00:00'\n")
Но ваш синтаксический анализатор не снимает эти кавычки и пространство, и ваш strptime
не ожидает их. И, в то время как 2018-01-01 10:00:00
будет соответствовать вашему формату, '2018-01-01 10:00:00'
- нет.
Вы можете решить это несколькими способами:
csv
для чтения (или numpy, поскольку вы уже импортируете его), который автоматически обрабатывает цитаты и пробелы CSV.timestamp = columns[2].strip().strip("'")
.strptime
: datetime.strptime(columns[2]," '%Y-%m-%d %H:%M:%S'")
Первый кажется, безусловно, самым чистым, но все они будут работать.
Конечно, как только вы это исправите, у вас a.write(','+LogTime-temp)
другая проблема: a.write(','+LogTime-temp)
пытается добавить строку ','
к объекту datetime
, а затем вычесть None
из результата. Ни один из этих типов не совместим, поэтому это не имеет смысла.
Если вы пытались разделить последующие времена, то вам нужно:
,
;timedelta
прежде чем пытаться присоединить одну из них к строке;str
а просто добавьте ее в ','
или, может быть, лучше, используйте f-строку (или format
) вместо добавления строк.Этого должно быть достаточно, чтобы вы начали, но это не полная программа:
temp = None
for line in a:
# ... up to LogTime = ...
if temp is not None:
diff = LogTime - temp
print(diff)
temp = LogTime
И затем вы пытаетесь записать файл в то же самое время, когда вы его читаете, и это просто ужасно. Вы прочтете одну строку, а затем перепишите следующую строку - или, более вероятно, половину следующей строки, или следующие две и третьи строки или что-то еще, затем прочитайте следующую строку после этого... То, что вы хотите сделать, - это один из:
os.replace
его по оригиналу, когда вы закончите, если необходимо);close
файл, open
тот же файл и запишите список строк.Вы читаете это значение "2018-01-01 11:30:00", а не "2018-01-01 11:30:00",
Просто попробуй
LogTime = datetime.strptime(columns[2].strip(" '"),"%Y-%m-%d %H:%M:%S")
Ваши данные, похоже, содержат цитаты, поэтому вместо "2018-01-01 11:30:00" у вас есть "2018-01-01 11:30:00" в переменной.
Вы можете разбить их по-разному, некоторые идеи ниже:
LogTime = datetime.strptime(columns[2],"'%Y-%m-%d %H:%M:%S'")
LogTime = datetime.strptime(columns[2].strip("'"),"%Y-%m-%d %H:%M:%S")
или использовать модуль csv,