读取pdf文件失败


text= textract.process("/Users/dg/Downloads/Data Wrangling/syllabi/82445.pdf") 

我试图读取这个文件,但它抛出以下错误:-

'charmap' codec can't decode byte 0x9d in position 6583: character maps to.

为什么会抛出这个错误?如何解决这个问题?

关于你的问题,这个错误可以这样解决:

有两种方法:

第一个:是通过执行:r"THEPATH",它将读取您通过路径插入的文件,例如:text = r"/Users/dg/Downloads/Data Wrangling/syllabi/82445.pdf">

或者你可以只加上两个"/",例如:"//Users//dg//Downloads//Data Wrangling//syllabi//82445.pdf"(这将以相同的方式工作。

希望这对你有所帮助:),并随时提出任何进一步的问题

我可以这样做:

import os
file = open("/Users/dg/Downloads/Data Wrangling/syllabi/82445.pdf", "r")
text = file.read()
file.close

这是一个编码问题。

Textract使用chardet检测pdf文件的编码(utf-8, latin1, cp1252等)。检测文件的编码并不总是一件容易的事情,chardet在检测文件编码时可能会失败。在您的情况下,对于这个特定的pdf文件,似乎失败了。

如果您知道文件的编码,那么您可以像这样使用input_encoding参数:

textract.process(filename, input_encoding="cp1252", output_encoding="utf8")

(见以下链接中的第309期)

注意,encoding参数指定的是输出编码,而不是输入编码.所以,写

text = textract.process(filename, encoding='ascii')

表示希望用ASCII编码编写输出文件。但这并不意味着ascii就是输入文件的编码。

关于chardet的说明:您可以使用chardet:

猜测这样一个文件的编码
import chardet
guessed_encoding = chardet.detect(file)
print(guessed_encoding)

它将输出如下内容:

{'encoding': 'EUC-JP', 'confidence': 0.99}

或:

{'encoding': 'EUC-JP', 'confidence': 0.24}

你可以看到这里有一个confidence键。在第一个示例中,chardet非常确信编码是EUC-JP,但在第二个示例中并非如此。

你可以试着对导致问题的pdf文件使用chardet,看看它的置信度是多少。

的有用链接:

https://github.com/deanmalmgren/textract/issues/309

https://github.com/deanmalmgren/textract/issues/164

最新更新