Python 提取和连接字符串的部分
我有大量的字符串要按以下方式处理。 对于每个字符串,需要提取从位置3到15的字符,位置9除外 因此,对于输入“F01MBBSGB50AGFX0000000000”,输出将是“MBBSGB50AGFX” 最明显的方式是Python 提取和连接字符串的部分,python,Python,我有大量的字符串要按以下方式处理。 对于每个字符串,需要提取从位置3到15的字符,位置9除外 因此,对于输入“F01MBBSGB50AGFX0000000000”,输出将是“MBBSGB50AGFX” 最明显的方式是s[3:11]+s[12:15] 但是,考虑到需要处理的数据量巨大,我需要关于推荐方法的帮助。当我有类似的东西,需要提取固定位置的字符串时,我喜欢使用Python切片来预定义要提取的感兴趣的字段。这可能有点过分,但它将所有字段位置和长度计数信息保留在一个易于管理的数据结构中,而不是通
s[3:11]+s[12:15]
但是,考虑到需要处理的数据量巨大,我需要关于推荐方法的帮助。当我有类似的东西,需要提取固定位置的字符串时,我喜欢使用Python切片来预定义要提取的感兴趣的字段。这可能有点过分,但它将所有字段位置和长度计数信息保留在一个易于管理的数据结构中,而不是通过代码散布
[2:10]
,[12:15]
,等等
# 1 2
#123456789012345678901234
samples = """\
F01MBBSGB50AGFX0000000000
F01MBCSGB60AGFX0000000000
F01MBDSGB70AGFX0000000000""".splitlines()
# define the different slices you want to get from each line;
# can be arbitrarily many, can extend beyond the length of the
# input lines, can include 'None' to imply 0 as a start or
# end-of-string as the end
indexes = [(3,9),(10,15)]
# convert to Python slices using 'slice' builtin
slices = [slice(*idx) for idx in indexes]
# make a marker to show slices that will be pulled out
# (assumes slices don't overlap, and no Nones)
marker = ''
off = 0
for idx in sorted(indexes):
marker += ' '*(idx[0]-off) + '^'*(idx[1]-idx[0])
off = idx[1]
# extract and concat
for s in samples:
print s
print marker
print ''.join(s[slc] for slc in slices)
print
印刷品:
F01MBBSGB50AGFX0000000000
^^^^^^ ^^^^^
MBBSGB0AGFX
F01MBCSGB60AGFX0000000000
^^^^^^ ^^^^^
MBCSGB0AGFX
F01MBDSGB70AGFX0000000000
^^^^^^ ^^^^^
MBDSGB0AGFX
如果愿意,还可以使用(开始,长度)
元组定义要提取的片段,如中所示
fields = [(3,6), (10,5)]
然后使用以下命令将这些转换为切片:
slices = [slice(start,start+length) for start,length in fields]
上述代码的其余部分保持不变。您需要什么帮助?字符串切片是实现这一点的方法,是的。你确定Python是适合这项工作的工具吗?输入格式是什么?有多少数据?进程可以运行多长时间?字符串的“庞大数量”是多少?我看不出为什么这不是最好的方式。Python应该做得很好。预期的输出是什么?除了位置9,你所说的
是什么意思<代码>“F01MBBSGB50AGFX0000000000”[3:15]=“MBBSGB50AGFX”
和(s[3:11]+s[12:15])!=“MBBSGB50AGFX”
和(s[3:9]+s[10:15])!=“MBBSGB50AGFX”
。这可能是操作符.itemgetter(*slices)(s)