计算文本文件中的时间与当前时间的差异

2 投票
2 回答
1400 浏览
提问于 2025-04-18 10:19

我刚开始学习Python,正在写一个简单的脚本,用来计算一个文本文件里写的时间和现在的时间之间的差距。文本文件里的时间格式是:2013-10-05 00:20

这是我的脚本

f = open('N:\\newfile.txt')
timestamp = f.readline()
f.close()
now = str(datetime.now())
#Removing the seconds from the now time
now = now[0:16]
FMT = '%Y-%m-%d %H:%M'
tdelta = datetime.strptime(now, FMT) - datetime.strptime(timestamp, FMT)
print tdelta

但是当我运行它的时候,出现了以下错误

Traceback (most recent call last):
File "N:\Test.py", line 12, in <module>
tdelta = datetime.strptime(now, FMT) - datetime.strptime(timestamp, FMT)
File "C:\Program Files (x86)\Python26\lib\_strptime.py", line 328, in _strptime
data_string[found.end():])
ValueError: unconverted data remains:

有没有人能告诉我我哪里做错了?

2 个回答

0

如果你刚接触Python,我建议你使用 dateutil.parse 这个模块。它可以帮助你解析常见的日期格式,即使你不知道现在用的是什么格式也没关系。
举个例子:

>>> import dateutil.parser
>>> from datetime import datetime
>>>
>>> utc_time = '2014-06-19T00:00:00'
>>> dateutil.parser.parse(utc_time)
datetime.datetime(2014, 6, 19, 0, 0)
>>> local_time = '2014-06-19 00:00:00+0002'
>>> dateutil.parser.parse(local_time)
datetime.datetime(2014, 6, 19, 0, 0, tzinfo=tzoffset(None, 120))
>>> #even with new line char
>>> time_with_new_line = '2014-06-19 00:00\n'
>>> dateutil.parser.parse(time_with_new_line)
datetime.datetime(2014, 6, 19, 0, 0)

一旦你把字符串格式的日期解析成了日期时间对象,接下来的减法操作就非常简单了。

>>> import dateutil.parser
>>> from datetime import datetime
>>> with open('newfile.txt','r') as f:
...     datetime.now() - dateutil.parser.parse(f.readline())
... 
datetime.timedelta(0, 28100, 210498)
3

文件对象的 readline() 方法会返回一整行内容,包括行末的换行符。Python 的文档里有更详细的说明,大家可以查看 这里

f.readline() 会从文件中读取一行;在字符串的末尾会保留一个换行符(\n),只有在文件的最后一行如果没有换行符时,这个换行符才会被省略。这样返回的结果就很明确;如果 f.readline() 返回的是空字符串,说明已经到文件的末尾了,而一个空行则用 '\n' 表示,就是一个只包含换行符的字符串。

所以,你的 timestamp 看起来像这样:

'2014-06-18 23:33\n'

... 而 strptime() 在处理最后的换行符时出现了问题。你可以通过修改这一行来解决这个问题:

timestamp = f.readline()

改成

timestamp = f.readline().strip()

(使用 str.strip() 方法来去掉字符串两端的空白字符)。

撰写回答