如何在python中将字符串日期列表转换为日期时间
我正在尝试将此字符串列表中的每个元素转换为DateTime。我从“日志”文件中提取了这些日期。此列表包含1127655个元素,如下所示:如何在python中将字符串日期列表转换为日期时间,python,list,datetime,Python,List,Datetime,我正在尝试将此字符串列表中的每个元素转换为DateTime。我从“日志”文件中提取了这些日期。此列表包含1127655个元素,如下所示: 01/Aug/1995:00:00:01 01/Aug/1995:00:00:07 01/Aug/1995:00:00:08 01/Aug/1995:00:00:08 01/Aug/1995:00:00:08 01/Aug/1995:00:00:09 我正在尝试将此列表转换为以下格式: 1995-08-01 00:00:09 我尝试将此代码用于
01/Aug/1995:00:00:01
01/Aug/1995:00:00:07
01/Aug/1995:00:00:08
01/Aug/1995:00:00:08
01/Aug/1995:00:00:08
01/Aug/1995:00:00:09
我正在尝试将此列表转换为以下格式:
1995-08-01 00:00:09
我尝试将此代码用于包含3个元素的列表:
for item in newdate:
print(item)
read = datetime.datetime.strptime(item,'%d/%b/%Y:%H:%M:%S')
print(read)
它适用于几个元素,但不适用于整个列表。我经常遇到这样的错误:
ValueError: unconverted data remains:
有人能解释一下这个错误是什么以及我为什么会出现这个错误吗?当你传递一个与转换格式不同的日期字符串(即末尾的额外内容)时,你会得到一个“未转换的数据剩余”。下面的示例将抛出一个错误
datetime.datetime.strptime("01/Aug/1995:00:00:01+0030", "%d/%b/%Y:%H:%M:%S")
为了避免这种情况,以及通过“01/Aug/1995:00:00:01”等其他错误情况,请在将其转换为日期之前使用以下命令
item = re.sub("\s", "", item)
item = item[0:20]
# in one line item = re.sub("\s", "", item)[0:20]
我通过图书馆找到它
以下是我得到的:
从日期时间导入日期时间
#复制您的文件
file=“””01/Aug/1995:00:00:01
1995年8月1日:00:00:07
1995年8月1日:00:00:08
1995年8月1日:00:00:08
1995年8月1日:00:00:08
1995年8月1日00:00:09
#首先,使用“`\n”拆分所有行`
parsed_dates=file.split(“\n”)#现在您的日期以python列表的形式出现
#使用'datetime'库将字符串转换为datetime
dates=[datetime.strTime(日期,“%d/%b/%Y:%H:%M:%S”),用于解析日期中的日期]
#将日期时间转换为所需格式的字符串
转换的_日期=[str(date)表示日期中的日期]#年-月-日HH:MM:SS是字符串化日期的默认输出
#结果:
['1995-08-01 00:00:01',
'1995-08-01 00:00:07',
'1995-08-01 00:00:08',
'1995-08-01 00:00:08',
'1995-08-01 00:00:08',
'1995-08-01 00:00:09']
使用以下列表
thislist = ["01/Aug/1995:00:00:01","01/Aug/1995:00:00:07","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:09"," 01/Aug/1995:00:00:09", "01//Jun/1996:10:10:10"]
使用Try-Except,可以知道错误出现的确切位置。更准确地说,
import datetime
thislist = ["01/Aug/1995:00:00:01","01/Aug/1995:00:00:07","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:09"," 01/Aug/1995:00:00:09", "01//Jun/1996:10:10:10"]
for item in thislist:
try:
read = datetime.datetime.strptime(item,'%d/%b/%Y:%H:%M:%S')
print(read)
except ValueError:
print("ValueError in: ")
print(item)
将打印
如您所见,此调整列表中的最后两项(如中所示,抓取您的并添加另外两项)被except块捕获
虽然代码在初始项中运行良好,但在一个添加的项中,开头有一个空格,而在另一个项中,只有两个斜杠,而不是一个斜杠
虽然如果项目的格式都正确,代码就可以正常工作,但情况并非如此。要修复它,您必须处理导致ValueError的原因
在这个特定场景中,我们需要确保两件事
请注意,您还需要特别处理其他可能的情况,但这会让您知道如何处理。哪一行出现故障?您应该
.strip()
删除新行字符的每一行newdate
都没有定义。您需要提供一个命令。@IainShelvington我无法理解它在哪一行失败。我应该在哪里使用.strip()
?@wjandrea实际上我刚刚创建了一个包含3个元素的newdate列表来检查代码是否正常工作。它适用于较小的列表大小。其中一个日期的格式不同我已经有了一个列表并尝试了此方法,但不起作用。在这一点上,它给了我一个错误,dates=[datetime.strtime(date,“%d/%b/%Y:%H:%M:%S”),用于解析日期中的日期]
Ok,您能告诉我在引发错误时它试图转换的值是什么吗?可能使用:[print(date);datetime.strtime(date,“%d/%b/%Y:%H:%M:%S”)作为已解析日期中的日期]
并发布最后一行打印的内容我遇到了错误,因为我直接在列表上执行此操作,而没有使用“\n”将其拆分,并且列表的结尾可能有一些空格。
item.strip()
item.replace("//", "/")
import datetime
thislist = ["01/Aug/1995:00:00:01","01/Aug/1995:00:00:07","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:08","01/Aug/1995:00:00:09"," 01/Aug/1995:00:00:09", "01//Jun/1996:10:10:10"]
for item in thislist:
try:
item = item.strip()
item = item.replace("//", "/")
read = datetime.datetime.strptime(item,'%d/%b/%Y:%H:%M:%S')
print(read)
except ValueError:
print("ValueError in: ")
print(item)