我正在尝试从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'不匹配
有人可以帮我解决此错误吗?
答案 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)}