计算文本文件和现在的时间之间的时间差

时间:2014-06-19 02:39:44

标签: python python-2.7 datetime text-processing strptime

我是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 :(得分:3)

文件对象的readline()方法返回一行,包括它的终止换行符。 Python的文档有the details

  

f.readline()从文件中读取一行;换行符(\n)留在字符串的末尾,如果文件没有以换行符结尾,则只在文件的最后一行省略。这使得返回值明确无误;如果f.readline()返回空字符串,则表示已到达文件的末尾,而空行由'\n'表示,该字符串仅包含一个换行符。

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

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

... strptime()在最后的换行符上窒息。您可以通过更改此行来修复它:

timestamp = f.readline()

timestamp = f.readline().strip()

(使用str.strip()方法从字符串中去除空格。)

答案 1 :(得分: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)

将字符串日期解析为datetime对象后,substract是微不足道的

>>> 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)