Python:日期/时间格式

标签 python datetime-format

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

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: 

最佳答案

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

您有多种选择来解决此问题。下面你会发现两个“修复”读取行,第三个“修复” datetime 所期望的格式。 :

  1. 您可以删除 \n它使用 rstrip 读完该行后:

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

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

我会使用1. ,因为如果你的line不以换行符结尾,一切仍然有效。

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

关于Python:日期/时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295506/

相关文章:

vb.net - DateTimePicker控件不显示AM/PM

php - 如何在 Php 中将日期从一种格式转换为另一种格式

python - 通过 Flask/Python/Heroku 上传后在哪里可以找到文件?

python - Pandas:分组和条件求和并添加回数据框

python - 列表推导式生成以下列表

mongodb - 在 mongodb c# 驱动程序中设置 DateTimeSerializationOptions.Defaults 的新方法是什么?

c# - 将相对日期时间字符串转换为 DateTime 对象

php - 从PHP到MySQL的DateTime

python - Google Colab - 选择特定的 Python 版本

python - 具有组条件的 Pandas 自定义聚合函数,可能吗?