[英]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.