从行中拆分和提取值?

时间:2019-03-23 11:06:00

标签: python pandas csv

我要从以下行中提取日期和时间,包括AM / PM。 但是会跳过DateTime的时间部分。

 6/1/2018 12:01:11.490 AM   HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing   On    "

p=[]
xx = "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 
oil pump runing On  "
new=re.split(r'\s',xx)
print(new)
p.append(new.pop(0))
p.append(new.pop(1))
print(p)

2 个答案:

答案 0 :(得分:1)

否,这里有time部分,问题是pop,正则表达式很好,可以通过运行下面的源代码看到(不需要pop这种情况下tbh):

简单的解决方案(无pop):

import re

xx = (
    "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing On"
)
new = re.split(r"\s", xx)
print(new[:3])

预期返回的结果:

['6/1/2018', '12:01:11.490', 'AM']

为什么它不起作用?

当您pop元素从列表中删除时。删除0元素('6/1/2018'),新的0元素成为缺少的日期,然后弹出第一个元素,它实际上是AM。 / p>

通过弹出窗口,您将获得全部三个(假设new已像以前一样创建):

for _ in range(3):
    print(new.pop(0))

答案 1 :(得分:0)

我对regex并不擅长,当然有一定的空间可以加强此regex,但作为第一个步骤,假设您的datetime字符串具有固定格式。它不验证日期。

import re

xx = "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing On  "

p1 = re.compile('(?:\d{1,2}\/){2}\d{4}\s+(?:\d{2}:){2}\d{2}\.\d{3}\s+[AaPp][Mm]')
p = re.findall(p1, xx)
print(p)