Когда у меня есть что-то подобное, с фиксированными позициями строк для извлечения, мне нравится использовать кусочки Python для предопределения интересующих полей. Это может быть немного избыточным, но он сохраняет всю информацию о местоположении и длине поля в одной простой в управлении структуре данных, вместо того, чтобы посыпать код [2:10]
, [12:15]
и т. Д.
# 1 2
#123456789
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
Если вы предпочитаете, вы можете также определить части, чтобы извлечь с помощью (start,length)
кортежей, как в
fields = [(3,6), (10,5)]
Затем преобразовать их в ломтики:
slices = [slice(start,start+length) for start,length in fields]
И весь остальной код выше не изменился.
С чем вам нужна помощь? String slicing - это способ сделать это, да. – Amber
Вы уверены, что Python является правильным инструментом для этой работы? – Blender
Что такое формат ввода? Сколько данных? Как долго может работать процесс? – Homer6