Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将日期字符串列表重新格式化为日、月、年_Python_List_Date_Datetime_Format - Fatal编程技术网

在Python中将日期字符串列表重新格式化为日、月、年

在Python中将日期字符串列表重新格式化为日、月、年,python,list,date,datetime,format,Python,List,Date,Datetime,Format,我想更改列表中字符串的格式。它们是日期,但已转换为字符串 我到处寻找这个解决方案,但似乎只有一个元素的答案 首先我做一个系列 Date_List = df.loc['receiveddate'] print Date_List Element1 2015-06-26 Element2 2015-06-25 Element3

我想更改列表中字符串的格式。它们是日期,但已转换为字符串

我到处寻找这个解决方案,但似乎只有一个元素的答案

首先我做一个系列

Date_List = df.loc['receiveddate']
print Date_List

Element1                               2015-06-26
Element2                               2015-06-25
Element3                               2015-06-26
Element4                               2015-06-25
Element5                               2015-06-25
Element6                               2015-07-01
然后我把它转换成一个列表

Date_List = [str(i) for i in Date_List]
这让我

['2015-06-26', '2015-06-25', '2015-06-26', '2015-06-25', '2015-06-25', '2015-07-01']
相反,我想要一个字符串列表,这些字符串可以是日、月、年

['06-26-2015', '06-25-2015...etc.]
我发现最常见的建议是使用strftime。尝试
Date\u列表=(datetime.datetime.strtime(i,“%B%d-%Y”)作为日期列表中的i)
刚刚给了我
value错误:时间数据“2015-06-26”与格式“%B%d-%Y”不匹配。

所以我试过了

Date_List = (datetime.datetime.strptime(i, "%Y-%m-%d") for i in Date_List)
此返回的<代码>['2015-06-26 00:00:00','2015-06-25 00:00:00','2015-06-26 00:00:00','2015-06-25 00:00:00','2015-07-01 00:00:00']


有人知道如何重新设置列表格式吗?或者早些时候,重新格式化该系列?谢谢。

你就快到了。
datetime.datetime.strtime
将字符串转换为
datetime
对象。您需要
datetime.datetime.strftime
将其转换回字符串:

Date_List = (datetime.datetime.strptime(i, "%Y-%m-%d") for i in Date_List)
Date_List = (datetime.datetime.strftime(i, "%m-%d-%Y") for i in Date_List)

您甚至不需要在此处使用
datetime
。只需将这些对象映射到一个函数,该函数将它们转换为字符串并在
-
上拆分它们,然后使用
str.format()


另外,从代码片段来看,您希望的是第一个月,而不是第一天。

您可以从字符串的角度来解决它

New_Date_List = [d[8:10]+"-"+d[5:7]+"-"+d[:4] for d in Date_List]

把你的理解改为

import datetime
Date_List = [datetime.datetime.strptime(str(i), '%Y-%m-%d').strftime('%m-%d-%Y') for i in Date_List]

正则表达式提供了一个非常简单的解决方案:

>>> import re
>>> re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2-\3-\1', '2015-06-25')
'06-25-2015'

虽然它并不漂亮,但应该可以生成一个月-日-年列表

New_Date_List = [[d][5:7] + '-' + Date_List[d][-2:] + '-' + Date_List[d][:4] for d in Date_List]

顺便说一下,
'2015-06-26'
与格式
'%B%d-%Y'
不匹配,因为您缺少一个连字符:
'%B-%d-%Y'
@TigerhawkT3在中添加连字符不会更改错误。看起来您的
%
变量也有错误
%B
是一个完整的月份名称,如
“一月”
。像其他地方一样尝试
“%Y-%m-%d”
。啊!我忘了补充一点,我也尝试过使用strftime。无论我在哪里,还是使用您的方法,都会出现这样一个让我困惑的错误:TypeError:不是JSON Serializable错误必须来自代码的另一部分。datetime与JSON无关实际上,我已经发现您的解决方案是创建一个generator对象。因此,为了使这个解决方案有效,您需要在第二行使用列表理解,因此Date_list=[datetime.datetime.strftime(i,“%m-%d-%Y”),对于Date_list中的i,您还可以说,“您甚至不需要将这些对象映射到一个函数,该函数将它们转换为字符串并在-,只需使用datetime,”…我可以,但是
datetime
速度很慢,我们只需要切换以连字符分隔的字符串的顺序。这很有效!它是一个短字符串,所以计时不是问题(至少在这种情况下)
New_Date_List = [[d][5:7] + '-' + Date_List[d][-2:] + '-' + Date_List[d][:4] for d in Date_List]