使用pdfplumber和Paramiko从SFTP服务器读取PDF文件

问题描述 投票:0回答:1

我直接连接到SFTP服务器-连接正常,没有问题,并且可以显示所选目录中的文件,而没有任何大问题。服务器上有不同的文件,我有几种功能可以读取它们,下面是一段涉及.pdf文件的代码–我使用pdfplumber读取PDF文件:

# SSH.connect configuration

sftp = ssh.open_sftp()

path = "/server_path/.."
for filename in sftp.listdir(path):
    fullpath = path + "/" + filename
    if filename.endswith('.pdf'):
        #fullpath - full server path with filename - like /server_path/../file.pdf
        #filename - filename without path - like file.pdf
        with sftp.open(fullpath, 'rb') as fl:
            pdf = pdfplumber.open(fl)

在此for循环中,我想读取所选目录中的所有.pdf文件-它对我在localhost上没有问题。

我试图用这种方式解决它with sftp.open(path, 'rb') as fl:-但在这种情况下,该解决方案不起作用,并且出现这样的错误代码:

Traceback (most recent call last):
pdf = pdfplumber.open(fl)
return cls(open(path, "rb"), **kwargs)
TypeError: expected str, bytes or os.PathLike object, not SFTPFile

pdfplumber.open将带有名称的文件的确切路径作为参数(在本例中为fullpath)。如何解决此问题,使其直接在服务器上工作?在这种情况下,如何管理内存–因为我知道这些文件以某种方式被拉到内存中。请给我一些提示。

python paramiko
1个回答
1
投票

Paramiko SFTPClient.open返回类似文件的对象。

要在SFTPClient.open中使用类似文件的对象,似乎可以使用pftplumber

load function

您还将希望阅读以下内容:load


由于类似Paramiko文件的对象与pdf = pdfplumber.load(fl) 函数结合使用时似乎效果欠佳,因此,您可以将文件下载到内存中,作为一种解决方法:

Reading file opened with Python Paramiko SFTPClient.open method is slow

请参见pftplumber.load

© www.soinside.com 2019 - 2024. All rights reserved.