如何用PyPDF2提取连续页码范围文本?排查代码仅返回最后一页问题
解决PyPDF2仅返回最后一页文本的问题
嘿,我来帮你排查这个问题!你遇到的情况大概率是没有用列表来存储每页的文本,反而每次循环都覆盖了同一个变量的值——比如你可能在循环里直接把page_content赋值为当前页的文本,这样每循环一次,之前的页内容就被新的覆盖了,最后自然只剩最后一页的结果。
问题核心原因
举个反例,如果你之前的循环是这样写的:
# 错误示范:用单个变量存储,会被覆盖 page_content = "" for page_num in range(number_of_pages): page = read_pdf.getPage(page_num) page_content = page.extractText() # 每次都覆盖之前的内容
那最后page_content只会保留最后一次循环的结果,也就是最后一页的文本。
修正后的代码
我们只需要初始化一个空列表,把每一页处理后的文本追加到列表里,就能得到每页文本的集合了。结合你提到的去重需求,代码可以改成这样:
import PyPDF2 # 打开PDF文件 pdf_file = open('enme2.pdf', 'rb') read_pdf = PyPDF2.PdfFileReader(pdf_file) number_of_pages = read_pdf.getNumPages() # 初始化空列表,专门存储每页的文本 page_contents = [] # 遍历每一页,提取并处理文本 for page_num in range(number_of_pages): page = read_pdf.getPage(page_num) # 提取当前页原始文本 raw_text = page.extractText() # 这里加入你的去重逻辑(示例:保留字符顺序的去重) # 如果你有自己的去重方法,替换这段即可 unique_chars = [] seen = set() for char in raw_text: if char not in seen: seen.add(char) unique_chars.append(char) unique_text = ''.join(unique_chars) # 将处理后的当前页文本加入列表 page_contents.append(unique_text) # 现在page_contents就是每页文本的列表,索引对应页码(从0开始) print("每页文本列表:", page_contents) # 记得关闭文件,避免资源占用 pdf_file.close()
关键改动说明
- 用
page_contents = []创建一个空列表,用来单独存储每一页的文本 - 循环中使用
append()方法,把当前页处理后的文本添加到列表末尾,而不是覆盖变量 - 去重逻辑可以根据你的需求调整,示例里的方法是在保留字符原始顺序的基础上去重,你可以替换成自己的实现
这样处理后,page_contents就是包含所有页面文本的列表,每个元素对应一页的内容啦!
内容的提问来源于stack exchange,提问作者Winget
相关产品推荐
相关产品推荐

