【问题标题】:Python 3.6 csv str type date or time.struct_time type compare to datetime.date data typePython 3.6 csv str 类型 date 或 time.struct_time 类型与 datetime.date 数据类型比较
【发布时间】:2018-01-20 01:39:14
【问题描述】:

我有一个带有日期列的 csv 文件。我想将该日期与当前日期进行比较。当我使用 time 模块获取当前日期时,它是 datetime.date 类型,但是当我使用转换方法 @unwind 发布 here 时,我的列的数据类型是 time.struct_time 并且我收到错误。

import csv
import time
from datetime import datetime
import uuid
present = datetime.today().date()
with open(r'FilePath','r',newline='') as f:
        # skip header line
        next(f)
        r = csv.reader(f)
        for row in r:
            if len(row[29])>1:
                newdate2 = time.strptime(row[29], "%m/%d/%Y").strftime("%Y-%m-%d")

错误:

Traceback (most recent call last):
  File "C:/FilePath/DateCompare.py", line 15, in <module>
    newdate2 = time.strptime(row[29], "%m/%d/%Y").strftime("%Y-%m-%d")
AttributeError: 'time.struct_time' object has no attribute 'strftime'

索引可以组合成一个字符串,但我不知道如何转换为 datetime.date 进行比较。

将列转换为格式化字符串:

import csv
import time
from datetime import datetime
import uuid
present = datetime.today().date()

with open(r'FilePath','r',newline='') as f:
        # skip header line
        next(f)
        r = csv.reader(f)
        for row in r:
            if len(row[29])>1:
                newdate2 = time.strptime(row[29], "%m/%d/%Y")
                newdate3 = ('{}-{}-{}'.format(newdate2[0],newdate2[1],newdate2[2])) 

示例字符串输出:

2018-2-1
2018-2-1

【问题讨论】:

    标签: python-3.x csv date type-conversion


    【解决方案1】:

    使用 .now() 而不是 .today.date 将我的“当前”变量转换为 datetime.datetime 格式并使用 datetime.strptime(row[29], "%m/%d/%Y") 得到我的单元格值到 datetime.datetime 以便我可以将当​​前日期与文件中的日期进行比较。

    import csv
    from datetime import datetime
    present = datetime.now()
    with open(r'InputFilePath','r',newline='') as f:
        with open(r'DestinationFilePath','w', newline ='') as f1:
            next(f)
            w = csv.writer (f1)
            r = csv.reader(f)
            for row in r:
                if len(row[29])>1:
                    newdate2 = datetime.strptime(row[29], "%m/%d/%Y")
                    row[29] = newdate2
                    if row[29]>present:
                        w.writerow(row)
                    else:
                        continue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-15
      • 2017-01-10
      • 2018-01-21
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      相关资源
      最近更新 更多