Как перебирать вложенные списки, печатая значение индекса перед искомым - PullRequest
0 голосов
/ 15 апреля 2020

В python: Извинения, если название сбивает с толку. У меня есть список списков, полученных из моего файла Kindle clippings.txt. Я хотел бы искать в списке, печатая только те слова или предложения, которые я выделил. Формат файла .csv:

経済ヤクザ (角川文庫) (一橋 文哉) (BOOK)
- 位置No. 4-4のハイライト |作成日: 2020年3月21日土曜日14:53:17 *(DATE / PAGE)*
(EMPTY LINE)
無断 (WORD THAT I WANT)
========== (SEPARATOR
経済ヤクザ (角川文庫) (一橋 文哉)
- 位置No. 4-4のハイライト |作成日: 2020年3月21日土曜日 14:53:40

転載、
==========

И так далее. Мой код до сих пор:

import csv
raw_list = []
path = r'D:\Desktop\kindlewords.txt'
#open file, append each line to raw_list
with open(path, 'r',encoding='utf-8') as csv_file:
    csv_reader = csv.reader(csv_file)
    for line in csv_reader:
        raw_list.append(line)
    csv_file.close()

print(raw_list)
for block in raw_list:
    for characters in block:
        if '===' in characters:
           print(raw_list[raw_list.index(block)-1])

Моя проблема в том, что это возвращает тонну ['無 断'], что является только ПЕРВЫМ словом, которое я хотел бы получить из списков - кажется, что оно только ударяет по слову прямо перед первым появлением '=========='.

Я бы хотел найти все вхождения и быть открытым для любого метода (я пробовал регулярное выражение, но не знаю, как его использовать в этом случае).

The data I am searching from

What the current code prints

Первое изображение имеет формат файла .txt, а второе - то, что печатается по моему текущему коду.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы можете использовать переменную для хранения содержимого предыдущей строки при выполнении итерации по строкам входного файла и выводить предыдущую строку, если текущая строка равна разделителю записи:

with open(path) as file:
    for line in map(str.rstrip, file):
        if line == '==========':
            print(prev)
        prev = line

Демо: https://repl.it/@blhsing / GlossyPungentGlitch

1 голос
/ 15 апреля 2020

После более внимательного изучения кода я обнаружил проблему и нашел решение:

for index, block in enumerate(raw_list):
  for characters in block:
    if '===' in characters:
      print(raw_list[index-1])

Вы получали одинаковые значения, потому что индекс «этого значения» всегда был одинаковым. (дублирующее значение в списке)

например:

example_list = [1,2,1]

for x in example_list:
  print(example_list.index(x))

Вы получите:

0
1
0
...