问题描述
我有以下代码:
---- 92 PARAMETER result selected observations
height1 weight1 height2 weight2
i1 67.445523 163.692389
i2 68.649190 160.084811
i3 69.503911 164.720010
i4 59.850261 145.704159
i5 65.341938 155.586984
i6 64.142009 154.335001
i7 67.030368 158.768813
i8 73.236515 164.704340
i9 63.279277 149.784500
i10 69.001848 160.063428
i11 63.930208 152.827710
i12 70.719334 164.885704
i13 63.614565 150.071072
i14 70.533320 160.722483
i15 78.417676 172.298652
i16 67.404942 158.310596
i17 62.504967 150.899428
i18 62.122630 150.024298
i19 72.999194 166.771223
i20 74.935107 170.820610
i21 60.372876 149.152520
i22 76.748649 167.462369
i23 75.433331 171.773607
i24 65.717553 160.134888
i25 67.301426 158.713710
我想使其像这样一线:
from datetime import datetime
ds = "2020.10.10.12.30.59"
y,M,d,h,m,s = [int(x) for x in ds.split('.')]
dt = datetime(y,s)
print(dt)
这当然是行不通的。但是可以通过某种方式完成吗?
解决方法
从那时起,您只需使用unpacking进行传播:
dt = datetime(*[int(x) for x in ds.split('.')])
请注意*
。这样会将数据“传播”到每个参数中。
您在这里确实使用了错误的工具;使用datetime.strptime()
代替:
dt = datetime.strptime(ds,"%Y.%m.%d.%H.%M.%S")
,并避免所有拆分和转换为整数的工作。此外,这样可以更好地处理错误的输入,将%Y
的{{1}}模式接受两位数的年份,但是分割转换方法将接受它,但是给您错误的日期(例如strptime()
会给您20.10.10.12.30.59
而不是引发异常)。
如果必须使用拆分和转换,则可以使用datetime.datetime(20,10,12,30,59)
将map()
应用于每个拆分结果,然后使用int
来应用结果整数作为单独的参数:
*
,这也适用于生成器表达式:
dt = datetime(*map(int,ds.split(".")))
演示:
dt = datetime(*(int(s) for s in ds.split(".")))