字符串转整数报错:时间格式字符串无法转换为int的问题求助
解决将带引号的时间字符串转换为整数时的ValueError问题
从你的错误信息和代码来看,问题出在internalTimestamp = int(row2[16])这一行——row2[16]对应的字符串是带双引号的时间格式("2018-05-23-13:54:56.594000"),既不是整数也不是可直接转换为整数的数字字符串,所以触发了ValueError。
我给你分两步解决这个问题:
1. 先处理CSV读取时的引号问题
你当前的CSV读取代码用了quotechar='|',但如果原始CSV里的时间字段是用双引号包裹的,这个配置不会自动去掉引号。建议把quotechar改成双引号,让csv.reader自动处理字段的引号:
with open(r"C:\PATH\3dm2.csv", newline='') as csvfile: sensor2 = csv.reader(csvfile, delimiter=',', quotechar='"') # 把quotechar改为'"'
这样读取后的row2[16]就会变成干净的2018-05-23-13:54:56.594000,而不是带引号的字符串。
2. 将时间字符串转换为整数时间戳
接下来需要把这个时间字符串解析成datetime对象,再转换成整数形式的时间戳(秒或毫秒级,根据你的需求选择):
首先记得导入datetime模块:
import datetime
然后替换原来的internalTimestamp = int(row2[16])为:
# 解析时间字符串,格式要和你的字符串完全匹配 dt = datetime.datetime.strptime(row2[16], "%Y-%m-%d-%H:%M:%S.%f") # 转换为毫秒级时间戳(如果需要秒级就去掉*1000) internalTimestamp = int(dt.timestamp() * 1000)
额外提醒
如果你的时间字符串是UTC时区的,记得在解析后加上时区信息再转时间戳,避免本地时区影响结果:
from datetime import timezone dt = datetime.datetime.strptime(row2[16], "%Y-%m-%d-%H:%M:%S.%f").replace(tzinfo=timezone.utc) internalTimestamp = int(dt.timestamp() * 1000)
把这些修改应用到你的代码里,应该就能解决这个ValueError问题了。
内容的提问来源于stack exchange,提问作者JohnBigDick
相关产品推荐
相关产品推荐

