У меня есть данные, хранящиеся в списке, который следует шаблону. Данные поступают из чтения файла построчно и добавления определенных строк в список. Когда я печатаю список, данные следуют порядку, и это здорово.
Могу ли я прочитать этот список, чтобы выбрать фрагменты данных?
Например, если у меня есть в списке:
['|CODE|', 'name', 'group', 'info', '|CODE_1|', 'name', 'group', 'info',]
и так далее...
Возможно ли вернуть строки между |CODE| части?
Кроме того, строки между каждым |CODE| строка может быть разной длины, т.е. между ними может быть 4 строки или 6 или 10 или 1 и т.д.
Дайте мне знать, если я могу как-то изменить свой вопрос :)
У меня еще нет кода, так как я не знал, как решить эту проблему.
Поскольку вопрос «возможно ли это?», то ответ «да».
Поскольку вопрос «возможно ли это?», то ответ «да».
Я могу добавить начальный элемент таким образом, чтобы он содержал символ | ... | да
yourlist[yourlist.index('|CODE|')+1:yourlist.index('|CODE_1|')]
list.index
получает индекс нужных вам строк. Остальное - это просто срез, чтобы нарезать этот список между желаемыми индексами.
Вам необходимо выполнить несколько шагов:
'|CODE|'
,lst = ["|CODE|", "name", "group", "info", "|CODE_1|", "name", "group", "info"]
chunk = []
chunks = []
for e in lst[lst.index("|CODE|") + 1 :]:
if e.startswith("|CODE"):
chunks.append(chunk)
chunk = []
else:
chunk.append(e)
if chunk:
chunks.append(chunk)
print(chunks)
# [['name', 'group', 'info'], ['name', 'group', 'info']]
Если вам нужно включить строку, которая запускает фрагмент:
chunk = ["|CODE|"] # start chunk with first marker
...
chunk = [e] # each chunk start with the marker
# [['|CODE|', 'name', 'group', 'info'], ['|CODE_1|', 'name', 'group', 'info']]
Результат:
lst = ["|CODE|", "name", "group", "info", "|CODE_1|", "name", "group", "info", "|CODE_2|", "name", "group", "info", "|CODE_3|", "name", "group", "info"]
chunks = []
chunk = ["|CODE|"]
for e in lst[lst.index("|CODE|") + 1 :]:
if e.startswith("|CODE"):
chunks.append(chunk)
chunk = [e]
else:
chunk.append(e)
if chunk:
chunks.append(chunk)
print(chunks)
# [['|CODE|', 'name', 'group', 'info'], ['|CODE_1|', 'name', 'group', 'info'], ['|CODE_2|', 'name', 'group', 'info'], ['|CODE_3|', 'name', 'group', 'info']]
Вам нужно действовать шаг за шагом.
Вы знаете, что вам нужно перебрать список, поэтому выполните цикл for,
Вам нужен список chunks
, это легко сделать, создайте пустой список перед циклом. Это ваша окончательная структура данных, которую вы хотите заполнить,
Вы хотите, чтобы короткие chunk
данных хранились внутри chunks
:
chunk
внутри chunks
.chunk
? При обнаружении «маркера нового фрагмента» стартовая строка "|CODE"
. Сделайте если.chunk
в пустой список, теперь вы начинаете новый chunk
,Что делать, если не обнаружить новый chunk
? Добавьте значение к текущему chunk
,
Каждый шаг прост сам по себе, но весь процесс может показаться ошеломляющим. Когда вы не знаете, с чего начать, разделите задачу на мелкие, разделите сложность. И не стесняйтесь разделять, если шаг кажется слишком сложным, чтобы его было легко сделать. Когда вы продвигаетесь в написании алгоритма, попробуйте проверить свои шаги, запустив свой код, и убедитесь, что результат вашей текущей работы соответствует вашим ожиданиям.
Привет еще раз! этот код, похоже, работал, но возвращает только последний маркер кода в последнем и последующих строках. есть несколько маркеров кода заранее.
@ Джек Чего не хватает? Можете ли вы привести пример?
"|КОД|", "имя", "группа", "информация", "|КОД_1|", "имя", "группа", "информация", "|КОД_2|", "имя", "группа", "info", "|CODE_3|", "name", "group", "info", поэтому для примера здесь код будет возвращаться только из CODE_3 и далее, а не другие "фрагменты"
Я обновил свой ответ, чтобы показать вам возвращаемое значение с вашим вводом, пожалуйста, покажите мне, что не так.
Я не знаю, что вам сказать, кроме того, что он возвращает только последний кусок, а не другие. это может быть что-то еще в моем коде, которое еще больше мешает, поэтому придется устранять неполадки
Мне удалось исправить проблему, это мешал другой код! Спасибо за помощь
Итак, код в ответе работает для вашей проблемы?
такие значения, как
|CODE_1|
, буквально входят в ваш список?