所以我知道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中的一流对象,具有用于操作它们的丰富接口。库为datetime。
> 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
都会得到这些结果
所以...请选择可读性最高的代码,因为性能的提高很小。
我可能会这样,而不是有很多收获:
我通常不会说“使用正则表达式”,但这是一个很好的用例:
我不确定是否要将其转换为正确的日期时间对象,或者只是对格式进行硬编码,可以执行以下操作:
导入日期时间对于范围(0,len(stringency.Date))中的i:c ['date'] = datetime.datetime.strptime(stringency.Date [i],'%Y%m%d')。date()。isoformat()