
Warum wird die Liste „Spans“ nie aktualisiert? Ich verstehe nicht, warum der Code in einer Endlosschleife hängen bleibt.
pdf: https://www.sil.org/system/files/reapdata/62/99/18/62991811720566250411942290005522370655/40337_02.pdf
Beispiel „Blockieren“: 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)Was ich erwarte, ist, dass print(spans) „[]“ ausgibt. Der Code erreicht diesen Punkt jedoch nie.
for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
wird nicht übersprungen span["font"] == "sb&cusilcharis-bold" 的第一个匹配项。所以 entry_last_position == entry_first_position, nichts wird gelöscht und man steckt in einer Endlosschleife fest. Ändern Sie es in
for i, span in enumerate(spans[entry_first_position+1:], start=entry_first_position+1):
Also beginnt die Suche nach der nächsten Position in der Liste
Das obige ist der detaillierte Inhalt vonFehler beim Aktualisieren der Liste während der Schleife in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Gängige Codierungsmethoden
Taobao passwortfreie Zahlung
Fall bei Verwendung von SQL
Was soll ich tun, wenn die temporäre PS-Festplatte voll ist?
So stellen Sie Daten von einer mobilen Festplatte wieder her
Was passiert, wenn die IP-Adresse nicht verfügbar ist?
Selbststudium für Anfänger in C-Sprache ohne Grundkenntnisse
window.prompt