繁体   English   中英

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

[英]How can I change date format in csv in Python 3

我是 Python 新手,我在 CSV 文件中有一组数据,我想将其格式更改为

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

我在 Windows 上运行 Python 3。 我已经多次搜索 SO(和其他网站),但似乎没有一个示例/解决方案实际上转换了输出的格式。 我已经阅读了 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()

我没有收到任何错误,但时间戳的格式也没有变化。

假设你有一个日期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")

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

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

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)

如果我正确理解您的问题,您的 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')

dts给出结果'08/10/2017'以写入更新的 CSV 文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM