【问题标题】:split string into groups of given size将字符串分成给定大小的组
【发布时间】:2012-11-11 13:50:10
【问题描述】:

我的情况是我有一个带有时间戳的项目列表,但实际的时间都被挤在一起了。像这样:

time = "165420" # 16:54:20 (or, 4:54 PM and 20 seconds.)

我想要一个脚本来遍历这些行并能够将时间戳转换为日期时间。我有年月日已经没问题了。但就当时的情况而言,我迫切希望找到一个优雅而简单的解决方案。我决定一开始就强制它继续我的代码,结果是:

import datetime

dt_timestamp = extract_dt("2012-11-09-165420") # example

def extract_dt(timestamp):
    ds = timestamp.split('-') #split into groups (0,1,2 are the date, 3 is the time.
    d = [int(i) for i in ds[:3]] + [int(ds[3][0:2]), int(ds[3][2:4]), int(ds[3][4:6])]
    return datetime.datetime(*d)

在尝试解决我的情况时,我看到这个问题有很多变化,有很多答案。

我找到了this solution:

def nsplit(s, n):
    return [s[k:k+n] for k in xrange(0, len(s), n)]

这对我很有效:

>>> s = "165420"
>>> n = 2
>>> [s[k:k+n] for k in xrange(0, len(s), n)]
['16', '54', '20']

但我很确定必须有一种更好、更优雅的方法将字符串分成大小相等的组,正如我提供的link 中提到的那样(但由于链接海报有错字而已修复):

TheFunction("Hello World",3)

返回:

['Hel','lo','Wor','ld']

如果可能的话,我希望它不是一个函数,我想要一种方法来实现它。它应该尽可能高效。我总是可以从我找到的函数中提取列表理解,但我觉得它不是很有效,而且看起来也不对。

答案可能很简单,我只是不知道。再次感谢。

【问题讨论】:

  • 问题已经得到解答 - 但是,我仍然想知道是否有人遇到过这个问题,如果他们找到了更好的拆分字符串的解决方案。

标签: python string performance datetime split


【解决方案1】:

我不知道有比您在问题中提到的更优雅的字符串分块解决方案,但datetime.datetime.strptime() 解决了您的实际问题:

>>> from datetime import datetime
>>> datetime.strptime("2012-11-09-165420", "%Y-%m-%d-%H%M%S")
datetime.datetime(2012, 11, 9, 16, 54, 20)

【讨论】:

  • 太好了,我不敢相信我没有想到日期时间的本地解决方案,因为输出该样式的是日期时间,它也必须能够将其作为输入。
【解决方案2】:

您可以为此使用textwrap.wrap()

>>> import textwrap
>>> s = "165420"
>>> n = 2
>>> textwrap.wrap(s, n)
['16', '54', '20']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2021-06-24
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多