Select 特定子字符串 - 动态索引
Select specific substing - dynamic indexing
我有几个 .csv 文件,格式略有不同。
格式一:X-XXX_2020-11-05_13-54-55-555__XX.csv
格式二:X-XXX_2020-11-05_13-54-55-555__XXX.csv
我需要提取 dametime 字段以将其添加到 pandas 数据帧。
通常我只会使用简单的切片
datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")
这会给我想要的结果,但仅限于 Format1。
对于 Format2,由于结尾不同,我需要将索引移动 1 进行切片。
另外由于其他操作,我无法从头开始索引。
目前我通过使用如下所示的 IF 语句绕过了它:
def tdate():
if string1[-7]=='X':
return datetime.datetime.strptime(string1[-32:-9], "%Y-%m-%d_%H-%M-%s-%f")
else:
return datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")
有没有更简单的方法来制作“动态”索引,这样我就可以避免创建额外的 def?
谢谢!
使用 str.split
和列表切片
例如:
import datetime
for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
print(datetime.datetime.strptime("_".join(i.split("_")[1:3]), "%Y-%m-%d_%H-%M-%S-%f"))
或使用正则表达式。
例如:
import re
import datetime
for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
d = re.search(r"(?<=_)(.+)(?=__)", i)
if d:
print(datetime.datetime.strptime(d.group(1), "%Y-%m-%d_%H-%M-%S-%f"))
输出:
2020-11-05 13:54:55.555000
2020-11-05 13:54:55.555000
我有几个 .csv 文件,格式略有不同。
格式一:X-XXX_2020-11-05_13-54-55-555__XX.csv
格式二:X-XXX_2020-11-05_13-54-55-555__XXX.csv
我需要提取 dametime 字段以将其添加到 pandas 数据帧。 通常我只会使用简单的切片
datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")
这会给我想要的结果,但仅限于 Format1。
对于 Format2,由于结尾不同,我需要将索引移动 1 进行切片。
另外由于其他操作,我无法从头开始索引。
目前我通过使用如下所示的 IF 语句绕过了它:
def tdate():
if string1[-7]=='X':
return datetime.datetime.strptime(string1[-32:-9], "%Y-%m-%d_%H-%M-%s-%f")
else:
return datetime.datetime.strptime(string1[-31:-8], "%Y-%m-%d_%H-%M-%s-%f")
有没有更简单的方法来制作“动态”索引,这样我就可以避免创建额外的 def?
谢谢!
使用 str.split
和列表切片
例如:
import datetime
for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
print(datetime.datetime.strptime("_".join(i.split("_")[1:3]), "%Y-%m-%d_%H-%M-%S-%f"))
或使用正则表达式。
例如:
import re
import datetime
for i in ("X-XXX_2020-11-05_13-54-55-555__XX.csv", "X-XXX_2020-11-05_13-54-55-555__XXX.csv"):
d = re.search(r"(?<=_)(.+)(?=__)", i)
if d:
print(datetime.datetime.strptime(d.group(1), "%Y-%m-%d_%H-%M-%S-%f"))
输出:
2020-11-05 13:54:55.555000
2020-11-05 13:54:55.555000