使用 pdfplumber 和 Paramiko 从 SFTP 服务器读取 PDF 文件
Use pdfplumber and Paramiko to read a PDF file from an SFTP server
我直接连接到 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
文件 - 它在本地主机上对我来说没有任何问题。
我试过用这种方法解决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
将文件的确切路径及其名称作为参数——在本例中为完整路径。我怎样才能解决这个问题,让它直接从服务器工作?在这种情况下如何管理内存——因为我知道这些文件以某种方式被拉入内存。请给我一些提示。
Paramiko SFTPClient.open
returns 类文件对象。
要用 pftplumber
使用类文件对象,似乎可以使用 load
function:
pdf = pdfplumber.load(fl)
你也会想读这个:
由于 Paramiko 类文件对象在与 pftplumber.load
函数结合使用时似乎效果不佳,作为解决方法,您可以将文件下载到内存中:
flo = BytesIO()
sftp.getfo(fullpath, flo)
flo.seek(0)
pdfplumber.load(flo)
见
我直接连接到 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
文件 - 它在本地主机上对我来说没有任何问题。
我试过用这种方法解决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
将文件的确切路径及其名称作为参数——在本例中为完整路径。我怎样才能解决这个问题,让它直接从服务器工作?在这种情况下如何管理内存——因为我知道这些文件以某种方式被拉入内存。请给我一些提示。
Paramiko SFTPClient.open
returns 类文件对象。
要用 pftplumber
使用类文件对象,似乎可以使用 load
function:
pdf = pdfplumber.load(fl)
你也会想读这个:
由于 Paramiko 类文件对象在与 pftplumber.load
函数结合使用时似乎效果不佳,作为解决方法,您可以将文件下载到内存中:
flo = BytesIO()
sftp.getfo(fullpath, flo)
flo.seek(0)
pdfplumber.load(flo)
见