Python:日期/时间格式

时间:2016-10-27 23:02:00

标签: python datetime-format

我正在尝试解析一个文件,其中包含一些条目,这些条目在其他字段中的最后一列中包含 date

Walmart,Retail,482,-0.7,2200000,Arkansas,31-10-1969

我试过这样做:

from datetime import datetime

def readdata (fname):

    print ('*'*5,'Reading Records From File',fname,'*'*5)

    data = []

    readf = open(fname,'r')
    for line in readf:       
        name1, name2, No_1, No_2, No_3, name3, date1 = line.split(',')
        date = datetime.strptime(date1,'%d-%m-%Y')
        Number1 = float(No_1)
        Number2 = float(No_2)
        Number3 = int(No_3)

        rec = [name1,name2,Number1,Number2,Number3,name3,date]
        data.append(rec)
    readf.close()
    print('\nDone.\n\n')
    return data

但是当我尝试将该行的最后一个字段(日期)转换为实际的datetime.datetime实例时,我收到以下错误:

data_string[found.end():])
    ValueError: unconverted data remains: 

完整的错误堆栈是

Traceback (most recent call last):
  File "C:\Users\Keitha Pokiha\Desktop\New folder\Program 2.py", line 42, in <module>
    main()
  File "C:\Users\Keitha Pokiha\Desktop\New folder\Program 2.py", line 39, in main
    data = readdata('fname.txt')
  File "C:\Users\Keitha Pokiha\Desktop\New folder\Program 2.py", line 12, in readdata
    date = datetime.strptime(date1,'%d-%m-%Y')
  File "C:\Users\Keitha Pokiha\AppData\Local\Programs\Python\Python35-32\lib\_strptime.py", line 510, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Users\Keitha Pokiha\AppData\Local\Programs\Python\Python35-32\lib\_strptime.py", line 346, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: 

1 个答案:

答案 0 :(得分:2)

您似乎遇到的问题是,当您执行for line in readf:时,line以回车符结束(特殊字符\n,表示新行),而不是尝试将31-10-1969转换为datetime,Python正在尝试使用格式31-10-1969\n转换%d-%m-%Y因此,当它完成解析年份(%Y)时发现了一个意外的\n以及您发现错误的原因:因为它不知道如何处理它。

您有几种方法可以解决此问题。在下面你会找到两个&#34;修复&#34;读取线,以及第三个修复&#34; datetime期望的格式:

  1. 您可以在阅读完行后使用this删除\n

    name1, name2, No_1, No_2, No_3, name3, date1 = line.rstrip().split(',')
    date = datetime.strptime(date1, '%d-%m-%Y')
    
  2. 或者您可以使用解释rstrip的方法并删除该行中的最后一个字符,如下所示:

    name1, name2, No_1, No_2, No_3, name3, date1 = line[:-1].split(',')
    
  3. 或者您可以告诉datetime模块在​​字符串中也需要换行符:

    name1, name2, No_1, No_2, No_3, name3, date1 = line.split(',')
    date = datetime.strptime(date1, '%d-%m-%Y\n')
    
  4. 我使用1.,因为如果您的line没有以换行符结尾,那么一切都会有效。

    PS (作为旁注):如果您正在阅读逗号分隔值文件,我强烈建议您使用here模块。