> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 반복하는 동안 목록을 업데이트하는 동안 오류가 발생했습니다.

Python에서 반복하는 동안 목록을 업데이트하는 동안 오류가 발생했습니다.

WBOY
풀어 주다: 2024-02-22 13:07:03
앞으로
862명이 탐색했습니다.

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

질문 내용

"spans" 목록이 업데이트되지 않는 이유는 무엇인가요? 코드가 무한 루프에 빠지는 이유를 모르겠습니다.

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

"차단" 예: https://jumpshare.com/s/y393jobqjfiye51gkexn

으아악

내가 기대하는 것은 print(spans)가 "[]"를 출력한다는 것입니다. 그러나 코드는 이 지점에 도달하지 않습니다.


정답


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)
로그인 후 복사

건너뛰지 않음 span["font"] == "sb&cusilcharis-bold" 的第一个匹配项。所以 entry_last_position == entry_first_position , 아무것도 삭제되지 않으며 무한 루프에 빠지게 됩니다.

로 변경하세요 으아악

그래서 목록의 다음 위치를 살펴보기 시작합니다

위 내용은 Python에서 반복하는 동안 목록을 업데이트하는 동안 오류가 발생했습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿