首頁  >  文章  >  後端開發  >  在 Python 中循環時更新列表時出錯

在 Python 中循環時更新列表時出錯

WBOY
WBOY轉載
2024-02-22 13:07:03820瀏覽

在 Python 中循环时更新列表时出错

問題內容

為什麼清單「spans」從未更新?我不明白為什麼程式碼會陷入無限循環。

pdf:https://www.sil.org/system/files/reapdata/62/99/18/62991811720566250411942290005522370655/40337_02.pdf



####################### ###「區塊」範例:https://jumpshare.com/s/y393jobqjfiye51gkexn###
import fitz

doc = fitz.open("cubeo/40337_02.pdf")
page = doc[3]

blocks = page.get_text("dict", flags = fitz.TEXTFLAGS_TEXT)["blocks"]
for block in blocks: 
    entries = []
    if len(block["lines"]) > 3: # ignora legendas e número de página
        for line in block["lines"]: 
            spans = []
            for span in line["spans"]:
                spans.append({"text": span["text"].replace("�", " "), "size": int(span["size"]), "font": span["font"]})

            # While there are spans left
            while True:
                # Delimits where an entry starts
                entry_first_position = None
                for i, span in enumerate(spans):
                    if span["font"] == "Sb&cuSILCharis-Bold":
                        entry_first_position = i
                        break
                if entry_first_position is not None:
                    # Delimits where an entry ends
                    entry_last_position = None
                    for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
                        if span["font"] == "Sb&cuSILCharis-Bold":
                            entry_last_position = i
                            break
                    if entry_last_position is not None:
                        # Whole entry is added as a list
                        append_list = spans[entry_first_position:entry_last_position]
                        entries.append(append_list)
                        spans = spans[:entry_first_position] + spans[entry_last_position:]
                    else:
                        break
                else:
                    break
             print(spans)
###我期望的是 print(spans) 輸出「[]」。然而,程式碼永遠不會達到這一點。 #########正確答案######
for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
###不會跳過 ###span["font"] == "sb&cusilcharis-bold"### 的第一個符合。所以 ###entry_last_position == entry_first_position### ,沒有任何內容被刪除,並且您陷入了無限循環。將其更改為###
for i, span in enumerate(spans[entry_first_position+1:], start=entry_first_position+1):
###因此它從清單中的下一個位置開始尋找###

以上是在 Python 中循環時更新列表時出錯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除