LangChain PDF问答项目报错:'bytes'对象无'seek'属性求解决
问题原因与解决方案
核心原因
这个错误的本质是你传递给PyPDF2.PdfReader的是bytes类型对象,但PdfReader要求的输入是可执行seek()方法的文件流对象(如打开的文件句柄)或文件路径字符串。seek()是文件IO对象的专属方法,bytes对象不具备该方法,因此触发了AttributeError。更换PyPDF2版本无法解决问题,因为这是参数类型传递错误,而非版本兼容问题。
修复方案
根据你获取PDF文件的方式,选择对应的修复方式:
场景1:通过Streamlit的file_uploader获取文件
如果你的docs是st.file_uploader()返回的UploadedFile对象(本质是封装后的bytes流),需要先用BytesIO将其包装成可seek的流对象:
from io import BytesIO from PyPDF2 import PdfReader def get_text(docs): raw_text = "" for pdf in docs: # 将上传的文件转换为可seek的BytesIO流 pdf_stream = BytesIO(pdf.read()) pdf_reader = PdfReader(pdf_stream) for page in pdf_reader.pages: page_text = page.extract_text() if page_text: # 避免提取空文本 raw_text += page_text return raw_text
场景2:直接处理本地文件路径
如果你的docs是本地PDF文件的路径列表,直接将路径字符串传给PdfReader即可:
from PyPDF2 import PdfReader def get_text(docs): raw_text = "" for pdf_path in docs: pdf_reader = PdfReader(pdf_path) # 直接传入文件路径 for page in pdf_reader.pages: page_text = page.extract_text() if page_text: raw_text += page_text return raw_text
内容的提问来源于stack exchange,提问作者Abishek AK
相关产品推荐
相关产品推荐

