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

如何在Python 3中更改csv中的日期格式,python,csv,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_oth

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

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

假设您有一个日期
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
后,您需要更改

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'
。您应该将其转换为带有

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文件。

我尝试了您的示例,但没有结果。我做错了什么,但我不知道是什么(见上面的代码片段)。@BrianHowe您更改了
ts
,但没有
row
。看看我的答案。希望现在能用。谢谢。那一行是我所缺少的。再次感谢你。
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()