鱼C论坛

 找回密码
 立即注册
查看: 1755|回复: 5

[已解决]帮我看看这个错那?

[复制链接]
发表于 2023-7-18 15:08:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
运行没反应 没错误提示 但是没转换

import pdfplumber
def pdf2txt(file_name):
    p = pdfplumber.open(file_name + ".pdf")
    page_num = len(p.pages)
    with pdfplumber.open(file_name + ".pdf") as pdf:
        for i in range(page_num):
            page = pdf.pages[i]
            text = page.extract_text()
            if text != None:
                with open(file_name + ".txt", "a", encoding = "utf-8") as f:
                f.write(text)
                print(file_name+' '+str(i+1)+'/'+str(page_num)+' 页读写完成', end='\r')

    file_name = r'f:\\123'
    pdf2txt(file_name)
最佳答案
2023-7-18 15:08:51
在你的代码中,我没有看到显著的错误。问题可能出在你所处理的PDF文件上,可能是你的PDF文档没有包含可提取的文本,而是包含图片或扫描件。这时, pdfplumber  的  extract_text()  方法将返回  None 。

在你的代码中,你对每一页文本做了  None  检查。如果所有页面的文本都是  None ,你的代码将不会写入任何东西到文本文件,同时也没有任何错误提示。

为了解决这个问题,你可以在 extract_text() 返回 None 时,打印出一些警告信息。这样你可以知道PDF文档中是否存在可提取的文本。

这是修改后的代码:
import pdfplumberdef pdf2txt(file_name):    with pdfplumber.open(file_name + ".pdf") as pdf:        page_num = len(pdf.pages)        for i in range(page_num):            page = pdf.pages[ i]            text = page.extract_text()            if text != None:                with open(file_name + ".txt", "a", encoding = "utf-8") as f:                    f.write(text)                    print(file_name+' '+str(i+1)+'/'+str(page_num)+' 页读写完成', end='\r')            else:                print(f"警告:第 {i+1} 页没有找到可提取的文本.")file_name = r'f:\\123'pdf2txt(file_name)
在此修改的代码中,我增加了一个else分支,如果  extract_text()  返回  None ,则会打印出警告信息。

请注意,如果你的PDF文件实际上包含的是图像,那么你需要使用OCR(光学字符识别)技术来从图像中提取文本。 pdfplumber  库本身并不包含OCR功能,但它可以与其他具有OCR功能的库(如  pytesseract )一起使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 15:08:34 | 显示全部楼层
这段代码可能出现了几个问题导致没有产生预期的输出或错误提示。

1. 首先,你提到你想使用pdfplumber库进行PDF文件转换,但是在代码中没有看到你导入该库的语句。你需要在代码开头添加import pdfplumber语句,以便正确导入该库。

2. 其次,在函数pdf2txt中,你使用了变量p来打开PDF文件,但之后并没有使用它进行后续操作。这可能导致没有正确提取文本内容。你可以尝试删除这部分代码,因为已经在之后使用了pdfplumber.open(file_name + ".pdf")来打开PDF文件。

3. 另外,在对每个页面进行文本提取时,你使用了page.extract_text()来获取文本内容,这是正确的。但是需要注意的是,有些页面可能无法提取到文本,返回的结果是None。所以在判断文本内容时,建议使用if text is not None:来检查条件。

4. 最后,print语句中的end='\r'参数表示不换行输出,但这在某些环境下可能不起作用。你可以尝试将其改为end='\n',以确保输出换行。

请按照上述建议修改你的代码,并检查是否仍然存在其他问题。如果需要进一步帮助,请提供更详细的错误信息或代码上下文。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 15:08:51 | 显示全部楼层    本楼为最佳答案   
在你的代码中,我没有看到显著的错误。问题可能出在你所处理的PDF文件上,可能是你的PDF文档没有包含可提取的文本,而是包含图片或扫描件。这时, pdfplumber  的  extract_text()  方法将返回  None 。

在你的代码中,你对每一页文本做了  None  检查。如果所有页面的文本都是  None ,你的代码将不会写入任何东西到文本文件,同时也没有任何错误提示。

为了解决这个问题,你可以在 extract_text() 返回 None 时,打印出一些警告信息。这样你可以知道PDF文档中是否存在可提取的文本。

这是修改后的代码:
import pdfplumberdef pdf2txt(file_name):    with pdfplumber.open(file_name + ".pdf") as pdf:        page_num = len(pdf.pages)        for i in range(page_num):            page = pdf.pages[ i]            text = page.extract_text()            if text != None:                with open(file_name + ".txt", "a", encoding = "utf-8") as f:                    f.write(text)                    print(file_name+' '+str(i+1)+'/'+str(page_num)+' 页读写完成', end='\r')            else:                print(f"警告:第 {i+1} 页没有找到可提取的文本.")file_name = r'f:\\123'pdf2txt(file_name)
在此修改的代码中,我增加了一个else分支,如果  extract_text()  返回  None ,则会打印出警告信息。

请注意,如果你的PDF文件实际上包含的是图像,那么你需要使用OCR(光学字符识别)技术来从图像中提取文本。 pdfplumber  库本身并不包含OCR功能,但它可以与其他具有OCR功能的库(如  pytesseract )一起使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 15:25:23 | 显示全部楼层
你的pdf会不会是纯图片pdf?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 15:51:36 | 显示全部楼层
isdkz 发表于 2023-7-18 15:25
你的pdf会不会是纯图片pdf?

应该是的 里面的文字搜索不出来 这个要怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 18:07:17 | 显示全部楼层
ssqchina 发表于 2023-7-18 15:51
应该是的 里面的文字搜索不出来 这个要怎么改?

如果是纯图片pdf那指定是读不出文字的,图片只能用ocr
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 08:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表