字符串切片基于关键字

时间:2018-03-23 14:04:14

标签: python string python-3.x

在下面的字符串中我想提取siteID(“=”之后的5位数字id)以获取新数据帧中的值,我需要高效的代码,因为我必须执行超过50万行的此任务。

FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3

3 个答案:

答案 0 :(得分:1)

正如@Arndt Jonasson所说,你可以使用正则表达式:

import re

my_string = '''FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3'''

re.findall('(?<=SiteID=)\d+', my_string)  # returns ['32013', '26241']

答案 1 :(得分:0)

这是通过pandas的一种方式。我建议你进行基准测试,看看哪种方法能够最好地处理您的数据和设置。

import pandas as pd
from io import StringIO

mystr = StringIO("""FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3""")

# replace mystr with 'file.csv'
df = pd.read_csv(mystr, skiprows=1, usecols=[1], header=None, sep=', ', index_col=False)

res = list(map(int, df[1].str.split('=').str[-1]))

# [32013, 26241]

答案 2 :(得分:0)

由于其灵活性和简单性,我会将RegEx用于此类任务。

这是一个有效的例子:

import re

data = "FSP10001GFelt\nLabel=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013\nLabel=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3"
matches = re.findall(r'.*SiteID=(\d+).*', data)

for match in matches:
    print match