将CSV列格式从字符串转换为日期时间

时间:2015-08-22 14:01:37

标签: csv datetime python-3.x

Python 3.4 ...我正在尝试将CS​​V中的特定列从字符串转换为datetime并将其写入文件。我能够读取和转换它,但需要帮助将日期格式更改写入文件(最后一行代码 - 需要修改)。最后一行代码出错时出现以下错误:序列预期。

import csv
import datetime

with open ('/path/test.date.conversion.csv') as csvfile:
    readablefile = csv.reader(csvfile)
    writablefile = csv.writer(csvfile)
    for row in readablefile:
        date_format = datetime.datetime.strptime(row[13], '%m/%d/%Y')
        writablefile.writerow(date_format)

1 个答案:

答案 0 :(得分:3)

所以date_format是datetime类的一个实例。您需要格式化字符串以打印到文件。你可以使用标准:

date_format.isoformat()

或自定义您自己的格式:

date_format.strftime('%Y-%m-%d %H:%M:%S')

还有几点需要注意。您无法写入您正在阅读的同一文件。如果要覆盖该文件,请创建一个tmp文件,然后在完成后将其替换,但最好只创建另一个文件。最好的解决方案就是充分利用stdin和stdout:

import csv
import sys
from datetime import datetime

FIELD = 13
FMT = '%m/%d/%Y'

readablefile = csv.reader(sys.stdin)
writablefile = csv.writer(sys.stdout)
for row in readablefile:
    dt = datetime.strptime(row[FIELD], FMT)
    row[FIELD] = dt.isoformat()
    writablefile.writerow(row)

现在您可以这样调用脚本:

cat /path/test.date.conversion.csv | python fixdate.py > another_file.csv

此时,您可以使用argparse模块为脚本提供各种好的参数,如:

  • 要格式化哪个字段?
  • 什么输入和/或输出格式?