datetime.strptime的值错误

时间:2017-07-27 15:58:10

标签: python

我正在尝试从txt文件中读取日期并将其转换为日期时间格式

代码

from datetime import datetime, date

with open("birth.txt") as f:
   content = f.readlines()
   content = [x.strip() for x in content] 
   for i in content:
     a = i.split(":")
     date_b = []
     date_b.append(a[-1])
     print date_b
     for j in date_b:
        date_object = datetime.strptime(str(j), '%m-%d-%Y')
        print date_object

文字档案

a:11-23-2001
b:02-14-2002
  

ValueError:时间数据'11-23-2001'与格式'%m-%d-%Y'不匹配

有人可以帮我解决此错误吗?

2 个答案:

答案 0 :(得分:2)

您的代码存在多个有问题的部分。错误是由于在日期字符串前面有一个空格引起的,尽管我不确定它来自给定文件的位置。另外,为什么你甚至有第二个循环?并且你在每个循环循环中覆盖date_b ...试试这个:

from datetime import datetime

with open("birth.txt") as f:
    dates = []  # store this outside of your loop
    for line in f:  # read line by line
        v, d = line.strip().split(":")
        d = datetime.strptime(d.strip(), '%m-%d-%Y')  # just in case of additional whitespace
        dates.append((v, d))
print(dates)
# [('a', datetime.datetime(2001, 11, 23, 0, 0)), ('b', datetime.datetime(2002, 2, 14, 0, 0))]

您也可以将后者转换为字典(dict(dates))或立即构建字典。

答案 1 :(得分:0)

除了@zwer指出的问题之外,在处理整个文件到内存之前,你的主要效率很低。这实际上使你的工作比它需要的更难,因为Python中的文件可以在他们的行上迭代。你可以这样做:

from datetime import datetime, date

with open('birth.txt') as f:
    for line in f:
        key, datestr = line.strip().split(':')
        dateobj = datetime.strptime(datestr, '%m-%d-%Y')
        print(dateobj)

使用文件是迭代器的事实,您可以编写一行列表解析来生成完整的日期列表:

with open('birth.txt') as f:
    dates = [datetime.strptime(line.strip().split(':')[1], '%m-%d-%Y') for line in f]

如果密钥具有一定的重要性,您可以使用类似的语法创建一个包含字典理解的字典:

with open('birth.txt') as f:
    dates = {key: datetime.strptime(datestr, '%m-%d-%Y') for key, datestr in (line.strip().split(':') for line in f)}