gpt4 book ai didi

python - strptime 不适用于以下格式

转载 作者:行者123 更新时间:2023-11-30 22:12:55 27 4
gpt4 key购买 nike

我使用了从日志文件中读取的以下格式,使用的格式化程序与日期时间格式匹配。不知道为什么它仍然出错。 - 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)正在尝试添加一个字符串',' datetime 对象,然后从结果中减去 None。这些类型都不兼容,因此这是没有意义的。

如果您随后尝试进行比较,那么您必须:

  • 特别处理第一行,因为它没有先前的时间;
  • 也要特别处理第一个 diff,因为它没有前面的 ,
  • 在尝试将其中一个时间附加到字符串之前,减去时间以获得timedelta
  • 使用 str 将 diff 转换为字符串,而不是仅仅将其添加到 ',',或者,也许更好,使用 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它覆盖原始文件);
  • 只需将要写入的行构建到列表中,然后关闭文件,重新打开同一文件,并写出行列表。<

关于python - strptime 不适用于以下格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com