将字符串格式的列日期更改为dd / mm / yyyy

问题描述 投票:1回答:2

我有一列包含此格式的数据(本质上是字符串):

21 apr 2015

我需要分析此列,其中包含多个项目,并输出为日期格式,例如:

dd/mm/yyyy

[在python中,我看到了很多示例,但是它总是处理“某种”格式的日期,如您所见,它们实际上不是格式的,所以如何实现呢?

虽然我不能使用pandas

我看过这样的例子:

string_date = "2013-09-28 20:30:55.78200"
datetime.datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S.%f")

但是,这处理的是字符串,格式为“ some”。

对此有任何想法吗?

python
2个回答
1
投票

您可以使用strptime创建一个返回所需格式的函数。和strftime进行格式化

from datetime import datetime

def convert_csv_date(csv_date):
  return datetime.strptime(csv_date, "%d %b %Y").strftime("%d/%m/%Y")

csv_date="21 apr 2015"
In [492]: convert_csv_date(csv_date)                                                                                                                          
Out[492]: '21/04/2015'

更新:这是一个完整的程序,它以您的日期格式将数据写入csv文件,然后使用convert_csv_date更新数据并编写一个新文件进行比较。希望对您有所帮助(您可能需要更改文件目录名称,我使用了/ tmp):

import csv
from datetime import datetime

def convert_csv_date(csv_date):
  return datetime.strptime(csv_date, "%d %b %Y").strftime("%d/%m/%Y")


lines = [['Vacation_Days', 'Date'],
 ['New Years', '01 jan 2019'],
 ['Labor Day', '02 sep 2019'],
 ['Thanksgiving', '24 nov 2019']]

with open('/tmp/output.csv', 'w') as writer:
    fd = csv.writer(writer)
    fd.writerows(lines)

r = csv.reader(open('/tmp/output.csv')) # Here's a sample date csv file
lines = list(r)

for item in lines[1:]: 
   item[1] = convert_csv_date(str(item[1])) 

print(lines)

with open('/tmp/output_test.csv', 'w') as writer:
    fd = csv.writer(writer)
    fd.writerows(lines)

1
投票

使用datetime库,您可以分两个步骤进行处理。首先,调用strptime将您输入的文本日期21 apr 2015转换为真正的Python datetime。然后,要生成另一个格式为%d/%m/%Y的日期字符串,请调用strftime

inp = "21 apr 2015"
out = datetime.strptime(inp, "%d %b %Y")
print(out.strftime("%d/%m/%Y"))

此打印:

21/04/2015
© www.soinside.com 2019 - 2024. All rights reserved.