从文件中读取日期

时间:2018-01-18 00:27:29

标签: python-2.7

我已经得到以下代码错误,我不确定原因。

from datetime import datetime
import os

Right_now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print('Right now is ' + Right_now)

filename = 'sysdate.txt'

with open(filename,"r") as fin:
     last_date = fin.read()
     my_date = datetime.strptime(str(last_date), '%Y-%m-%d %H:%M:%S')
fin.close()

该文件包含以下日期格式 2018-01-18 11:01:54

但是我收到以下错误消息..

Right now is 2018-01-18 11:16:13
Traceback (most recent call last):
  File "test1.py", line 11, in <module>
    my_date = datetime.strptime(str(last_date), '%Y-%m-%d %H:%M:%S')
  File "/usr/lib64/python2.7/_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains:

Python版本是2.7.5

2 个答案:

答案 0 :(得分:0)

假设您只对最后一个日期感兴趣,如果有多个,您需要修改您的程序以考虑最后返回的空字符串:

Sub CreatePDF()

    ActiveWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select

    Sheets("Sheet1").Activate

    ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:="C:\temp.pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True

    Sheets("Sheet1").Select
    Range("A1").Select

End Sub

使用with open(filename,"r") as fin: last_date = fin.read().split('\n')[-2] my_date = datetime.strptime(last_date, '%Y-%m-%d %H:%M:%S') 将立即读取整个文件。最后一个元素是到达文件末尾时返回的空字符串。您可以在this帖子和documentation中详细了解相关信息。

您更正的程序会读取文件并根据换行符将其拆分为行,然后选择前一个元素作为目标日期。其余命令成功运行。

您最后不需要.read() - .close()会自动关闭文件,

  

从Python 2.5开始,您可以避免必须显式调用此方法   如果你使用with语句。例如,以下代码将   退出with块时自动关闭f:

写在documentation

答案 1 :(得分:0)

你的问题是换行符。

我编写了一个非常相似的程序,从文本文件中的每一行读取一个日期,并得到相同的错误消息。

我通过使用 rstrip() 以类似的方式删除换行符来解决它:

with open(filename,"r") as fin:
    last_date = fin.read()
    my_date = datetime.strptime(str.rstrip(last_date), '%Y-%m-%d %H:%M:%S')

即使手册没有明确说明rstrip()也会删除换行符。