Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将字符串日期列表转换为日期时间_Python_List_Datetime - Fatal编程技术网

如何在python中将字符串日期列表转换为日期时间

如何在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 我尝试将此代码用于

我正在尝试将此字符串列表中的每个元素转换为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
我尝试将此代码用于包含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的原因

在这个特定场景中,我们需要确保两件事

  • 字符串开头没有不必要的空格。这可以通过方法完成(我们可以在这个场景中使用lstrip(),但是strip()也会删除字符串末尾不必要的空格)

  • 没有两条斜线分开。这可以通过使用一个斜杠替换两个斜杠来实现

  • 因此,下面的代码(注意item.strip和item.replace都返回一个值)

    将不会打印任何值错误


    请注意,您还需要特别处理其他可能的情况,但这会让您知道如何处理。

    哪一行出现故障?您应该
    .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)