更改csv文件

时间:2018-06-17 19:00:00

标签: python csv datetime

我有一个包含此格式数据的csv文件..

2018-06-01T09:20:00+0530,16.85,16.9,16.85,16.9,1000
2018-06-01T09:21:00+0530,16.9,17,16.9,17,500
2018-06-01T09:22:00+0530,17,17,15.5,15.5,500
2018-06-01T09:23:00+0530,15.5,15.5,15.5,15.5,0

我需要把它变成这种格式..

01/06/2018 09:20:00,16.85,16.9,16.85,16.9,1000
01/06/2018 09:21:00,16.9,17,16.9,17,500
01/06/2018 09:22:00,17,17,15.5,15.5,500
01/06/2018 09:23:00,15.5,15.5,15.5,15.5,0

基本上,必须为文件中的所有行更改日期格式。我无法对此进行编码,使用宏非常痛苦。

2 个答案:

答案 0 :(得分:1)

这可以使用Python的CSV和日期时间库完成,如下所示:

from datetime import datetime
import csv

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)

    for row in csv_input:
        dt = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S%z')
        row[0] = dt.strftime('%d/%m/%Y %H:%M:%S')
        csv_output.writerow(row)

这会创建一个output.csv文件,其中包含:

01/06/2018 09:20:00,16.85,16.9,16.85,16.9,1000
01/06/2018 09:21:00,16.9,17,16.9,17,500
01/06/2018 09:22:00,17,17,15.5,15.5,500
01/06/2018 09:23:00,15.5,15.5,15.5,15.5,0

strptime()用于将现有日期转换为Python datetime对象。然后可以使用strftime()函数将其转换回您需要的格式。它们使用特殊格式使用format specification来识别日期的各个部分。

csv库用于读取文件的一行并自动将其拆分为包含字符串列表的行。 row[0]拥有第一个值。

答案 1 :(得分:0)

适用于python版本2.7.15的最终代码,它是从Martin Evans发布的代码中提取的,如下所示:

from datetime import datetime
import csv

with open('f:\Downloads\Sample.csv') as f_input, open('f:\Downloads\Temp.csv', 'w') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)
    csv_input.next()                            # skip header line
    for row in csv_input:
        dt = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S+0530')    #parse the datetime
        row[0] = dt.strftime('%d/%m/%Y %H:%M:%S')           #assign the revised format
        csv_output.writerow(row)

Thanx everyone ..