所以我知道Python中的字符串是不可改变的,但我有一个字符串:
c['date'] = "20110104"
我想转换到
c['date'] = "2011-01-04"
我的代码:
c['date'] = c['date'][0:4] + "-" + c['date'][4:6] + "-" + c['date'][6:]
似乎有点令人费解,不是吗? 会是最好将其保存为一个独立的变量,然后做? 或者会不会有根本是没有区别?
所以我知道Python中的字符串是不可改变的,但我有一个字符串:
c['date'] = "20110104"
我想转换到
c['date'] = "2011-01-04"
我的代码:
c['date'] = c['date'][0:4] + "-" + c['date'][4:6] + "-" + c['date'][6:]
似乎有点令人费解,不是吗? 会是最好将其保存为一个独立的变量,然后做? 或者会不会有根本是没有区别?
你可以使用.join()
把它清理干净一点:
d = c['date']
'-'.join([d[:4], d[4:6], d[6:]])
你最好使用字符串格式比字符串连接
c['date'] = '{}-{}-{}'.format(c['date'][0:4], c['date'][4:6], c['date'][6:])
字符串连接一般是因为你上面说的字符串是不可变的更慢。
日期是在Python第一类对象,具有丰富的接口,用于操纵它们。 该库日期时间 。
> import datetime
> datetime.datetime.strptime('20110503','%Y%m%d').date().isoformat()
'2011-05-03'
不要重新发明轮子!
s = '20110104'
def option_1():
return '-'.join([s[:4], s[4:6], s[6:]])
def option_1a():
return '-'.join((s[:4], s[4:6], s[6:]))
def option_2():
return '{}-{}-{}'.format(s[:4], s[4:6], s[6:])
def option_3():
return '%s-%s-%s' % (s[:4], s[4:6], s[6:])
def option_original():
return s[:4] + "-" + s[4:6] + "-" + s[6:]
跑步%timeit
每个产生这些结果
所以......挑最可读的,因为性能的提升是边际
我可能会做这样一来,不就是有增益的大量工作:
d = c['date']
c['date'] = '%s-%s-%s' % (d[:4], d[4:6], d[6:])
大大的提高(恕我直言)是避免字符串连接。
我不是一般的家伙说:“使用正则表达式”,但这是一个很好的用例吧:
import re
c['date']=re.sub(r'.*(\w{4})(\w{2})(\w{2}).*',r"\1-\2-\3",c['date'])
我不知道,如果你想将其转换为一个适当的日期时间对象或者说只是硬编码的格式,你可以做到以下几点:
from datetime import datetime
result = datetime.strptime(c['date'], '%Y%m%d')
print result.date().isoformat()
输入: '20110104'
输出: '2011-01-04'