首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在某些位置替换表示日期的字符串

只在某些位置替换表示日期的字符串
EN

Stack Overflow用户
提问于 2017-09-01 08:44:35
回答 4查看 431关注 0票数 2

我有一个字符串表示日期,如:yymmdd (例如,2017年9月1日的170901 ),从datetime对象获得。

我想用空格代替每个字段的前导零。str.replace()不会这么做,因为它也取代了尾随零。

在字符串中,但是仅在某些位置(在字符串的偶数索引中),用Pythonic方法代替另一个字符是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-01 09:09:08

转换为datetime对象,然后使用格式化将前导空格而不是零应用于月和日:

代码语言:javascript
复制
from datetime import datetime

s = '170901'
s = '{dt:%y}{dt.month:2d}{dt.day:2d}'.format(dt=datetime.strptime(s, '%y%m%d'))
print(s)
#17 9 1

这还确保不能解析超出日和月(例如42 )限制范围的值。

datetime对象中,您可以轻松地切换到任何您想要的格式,或者来回切换初始字符串和后一个字符串:

代码语言:javascript
复制
>>> '{dt:%y}{dt.month:02d}{dt.day:02d}'.format(dt=datetime.strptime(s, '%y%m%d'))
'170901'
>>> '{dt:%y} {dt:%b} {dt.day:2d}'.format(dt=datetime.strptime(s, '%y%m%d')) 
'17 Sep  1'
票数 2
EN

Stack Overflow用户

发布于 2017-09-01 08:50:05

你认为这是一种优雅的做法吗?

代码语言:javascript
复制
s = '170901'    
res = ''.join([' ' if i%2==0 and x=='0' else x for i, x in enumerate(s)])
print(res)  # 17 9 1

您还可以用它创建一个函数,以便更容易地使用:

代码语言:javascript
复制
def date_format(date_as_str):
    return ''.join([' ' if i%2==0 and x=='0' else x for i, x in enumerate(date_as_str)])

print(date_format('170901'))  # 17 9 1
print(date_format('170910'))  # 17 910  does not remove the trailing ones..
票数 2
EN

Stack Overflow用户

发布于 2017-09-01 09:06:42

这是另一种解决方案,它具有一些迭代魔力,以避免构建不必要的容器。但也要注意我的评论。

代码语言:javascript
复制
>>> from itertools import izip, chain
>>> date = '170901'
>>> ''.join((chain.from_iterable((x if x != '0' else ' ', y) for x,y in izip(*[iter(date)]*2))))
'17 9 1'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45996363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档