首页 > 解决方案 > 如何遍历嵌套列表,在搜索索引之前打印索引的值

问题描述

在 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])

我的问题是这会返回大量的 ['无断'],这只是我想要从列表中获得的第一个单词 - 似乎它只会在第一次出现 '==== 之前击中单词======'。

我希望能够找到所有出现的情况,并对任何方法持开放态度(我尝试过正则表达式,但在这种情况下不知道如何使用它)。

我正在搜索的数据

当前代码打印的内容

第一个图像是 .txt 文件的格式,第二个是我当前代码打印的内容。

标签: pythonloopscsvfor-loopiterator

解决方案


在仔细查看您的代码后,我发现了问题并提出了解决方案:

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

推荐阅读