更改字符串格式(python)
我想将字符串更改字符串格式(python),python,string,Python,String,我想将字符串'datetime.datetime(2018,4,15,12,59)更改为格式'2018-04-15T12:59' 我创建了一个如下所示的函数: def changeDateFormat(date): newDate = [] for i in date.split('datetime')[2].split(','): newDate.append(re.sub('[() ]', '', i)) newStr = newDate[0] + '
'datetime.datetime(2018,4,15,12,59)
更改为格式'2018-04-15T12:59'
我创建了一个如下所示的函数:
def changeDateFormat(date):
newDate = []
for i in date.split('datetime')[2].split(','):
newDate.append(re.sub('[() ]', '', i))
newStr = newDate[0] + '-0' + newDate[1] + '-' + newDate[2] + 'T' + newDate[3] + ':' + newDate[4]
return newStr
它是有效的
但是,我也希望它能够处理这样的情况:如果每个单位小于10,我希望添加一个'0'
。现在它只添加了一个'0'
我可以用一种非常低效的方式来做,但我想知道如何才能用一种聪明的方式来做。我不明白为什么您使用datetime对象的字符串表示,但是
eval
是您的朋友:
>>> import datetime
>>> eval('datetime.datetime(2018, 4, 15, 12, 59)').isoformat()
'2018-04-15T12:59:00'
eval
文档:我不明白为什么要使用datetime对象的字符串表示,但是eval
是您的朋友:
>>> import datetime
>>> eval('datetime.datetime(2018, 4, 15, 12, 59)').isoformat()
'2018-04-15T12:59:00'
eval
文档:我假设您试图避免使用datetime
对象,因为在其他方面它似乎很容易混淆
我可以用一种非常低效的方式来做
你其实并不遥远,只有一行
def changeDateFormat(date):
newDate = []
for i in date.split('datetime')[2].split(','):
newDate.append(re.sub('[() ]', '', i))
pad = '-0' if newDate[1] < 10 else '-'
newStr = newDate[0] + pad + newDate[1] + '-' + newDate[2] + 'T' + newDate[3] + ':' + newDate[4]
return newStr
def changeDateFormat(日期):
newDate=[]
对于日期中的i.split('datetime')[2]。split(','):
newDate.append(re.sub('[()]','',i))
如果newDate[1]<10,则pad='-0'-'
newStr=newDate[0]+pad+newDate[1]+'-'+newDate[2]+'T'+newDate[3]+':'+newDate[4]
返回新闻
如果您不使用
datetime
对象,恐怕没有比这更聪明的方法了。我假设您正在尝试避免使用datetime
对象,因为它显然会让人困惑
我可以用一种非常低效的方式来做
你其实并不遥远,只有一行
def changeDateFormat(date):
newDate = []
for i in date.split('datetime')[2].split(','):
newDate.append(re.sub('[() ]', '', i))
pad = '-0' if newDate[1] < 10 else '-'
newStr = newDate[0] + pad + newDate[1] + '-' + newDate[2] + 'T' + newDate[3] + ':' + newDate[4]
return newStr
def changeDateFormat(日期):
newDate=[]
对于日期中的i.split('datetime')[2]。split(','):
newDate.append(re.sub('[()]','',i))
如果newDate[1]<10,则pad='-0'-'
newStr=newDate[0]+pad+newDate[1]+'-'+newDate[2]+'T'+newDate[3]+':'+newDate[4]
返回新闻
如果您不使用
datetime
对象,恐怕没有比这更聪明的方法了。datetime.strftime和eval在这里很完美
import datetime
# use eval to execute the string like a a command
dt = eval('datetime.datetime(2018, 4, 15, 12, 59)')
formatted_date = dt.strftime('%Y-%m-%dT%H:%M')
输出:“2018-04-15T12:59”
参考资料:datetime.strftime和eval在这里非常完美
import datetime
# use eval to execute the string like a a command
dt = eval('datetime.datetime(2018, 4, 15, 12, 59)')
formatted_date = dt.strftime('%Y-%m-%dT%H:%M')
输出:“2018-04-15T12:59”
参考资料:更好的解决方案是首先避免使用datetime对象的
repr
。在这方面我真的支持@miradulo。您必须使用repr
-字符串吗?为什么您不能访问实际的datetime
对象?更好的解决方案是首先避免使用datetime对象的repr
。在这一点上,我真的支持@miradulo。您必须使用repr
-字符串吗?为什么你不能访问实际的datetime
对象?“但是eval是你的朋友”-呃,我真的建议不要在这里或任何地方使用eval
。几乎总有比使用eval
更好的方法。使用eval
可能很有诱惑力,但我会发现一些不同的东西。请看“但是eval是你的朋友”-呃,我真的建议不要在这里或任何地方使用eval
。几乎总有比使用eval
更好的方法。使用eval
可能很有诱惑力,但我会发现一些不同的东西。请看,我知道这很诱人,但最好避免使用eval
。请看。当然,这将是一个个案的情况下,是否评估是坏的。在OP的例子中,我看不出使用eval
有多么糟糕。然而,我理解这场争论以及为什么通常应该避免。我知道这很诱人,但最好避免使用eval
。请看。当然,这将是一个个案的情况下,是否评估是坏的。在OP的例子中,我看不出使用eval
有多么糟糕。但是,我理解这场争论以及为什么应该避免。我并不认为OP应该这样做(他真的应该尝试获取实际的datetime
对象,而不是repr
),但是您可以使用re.findall
来获取数字,并避免使用re.sub
进行所有替换。我并不认为OP应该这样做(他确实应该尝试获取实际的datetime
对象,而不是repr
),但是您可以使用re.findall
来获取数字,并避免使用re.sub
进行所有替换。