如何在Python 3中更改csv中的日期格式

时间:2017-08-10 19:42:25

标签: python csv

我是Python的新手,我在CSV文件中有一组数据,我想从

更改格式

'%Y-%m-%dT%H:%MZ''%m/%d/%Y'

我在Windows上运行Python 3。我搜索了S.O. (和其他网站)几次,但没有一个示例/解决方案似乎实际上转换输出的格式。我已经阅读了Python在线文档,但无法从中获取任何有意义的内容。

以下是我刚试过的代码,它并没有改变列中任何条目的格式:

with open('some_file', 'r') as source:
    with open('some_other_file', 'w') as result:
        writer = csv.writer(result, lineterminator='\n')
        reader = csv.reader(source)
        source.readline()
        for row in reader:
            ts = row[17]
            ts = datetime.strptime(ts, '%Y-%m-%dT%H:%MZ').strftime("%m/%d/%Y")
            if ts != "":
                writer.writerow(row)
source.close()
result.close()

我没有错误,但我也没有改变时间戳的格式。

3 个答案:

答案 0 :(得分:1)

假设您有一个日期x

x = "2017-07-01T15:55Z"

您可以使用您的格式datetime.datetime将其转换为%Y-%m-%dT%H:%MZ

from datetime import datetime
d = datetime.strptime(x, '%Y-%m-%dT%H:%MZ')

然后格式化:

d.strftime("%m/%d/%Y")

你会得到:

'07/01/2017'

完整的代码是:

from datetime import datetime
x = "2017-07-01T15:55Z"
x = datetime.strptime(x, '%Y-%m-%dT%H:%MZ').strftime("%m/%d/%Y")

=======编辑=======

您的后续问题: 格式化row后需要更改ts

ts = row[17]
ts = datetime.strptime(ts, '%Y-%m-%dT%H:%MZ').strftime("%m/%d/%Y")
if ts != "":
    row[17] = ts # this is what you miss
    writer.writerow(row)

答案 1 :(得分:0)

如果我正确理解您的问题,您的CSV文件中会有一个类似'2017-08-10T20:47Z'的字符串。您应该使用

将其转换为datetime.datetime实例
from datetime import datetime
dt = datetime.strptime('2017-08-10T20:47Z', '%Y-%m-%dT%H:%MZ')

这会为您提供datetime.datetime个对象:datetime.datetime(2017, 8, 10, 20, 47)。然后,您可以根据需要使用

重新格式化它
dts = dt.strftime('%m/%d/%Y')

'08/10/2017'中提供结果dts以写入您更新的CSV文件。

答案 2 :(得分:0)

import csv
from datetime import datetime

with open('some_file.csv', 'r') as source:
    with open('some_other_file.csv', 'w') as result:
        writer = csv.writer(result, lineterminator='\n')
        reader = csv.reader(source)
        source.readline()
        for row in reader:
            ts = datetime.strptime(row[0], '%m/%d/%y %H:%M').strftime("%Y-%m-%d %H:%M:00")
            print(ts)
            row[0]=ts
            if ts != "":
                writer.writerow(row)
source.close()
result.close()