使用Python脚本从FTP下载.pdf文件

使用Python脚本从FTP下载.pdf文件,python,pdf,ftp,download,Python,Pdf,Ftp,Download,对不起,我对Python很陌生。我可以使用Python中的ftplib从FTP下载文件,但这就像我硬编码文件名(R.pdf)和仅下载(R.pdf),有没有办法使用Python将FTP中所有扩展名为.pdf的文件下载到本地系统。我可以在Shell中通过使用*.pdf来实现这一点。我没有访问FTP服务器的权限。我可以尝试这样做,但粗略地看一下就表明这是不可能的 但是,您可以使用或命令获取远程端的文件列表,然后在循环中获取每个文件。用凭据替换主机、用户和密码, 和“public_html/soleil

对不起,我对Python很陌生。我可以使用Python中的ftplib从FTP下载文件,但这就像我硬编码文件名(R.pdf)和仅下载(R.pdf),有没有办法使用Python将FTP中所有扩展名为.pdf的文件下载到本地系统。我可以在Shell中通过使用*.pdf

来实现这一点。我没有访问
FTP
服务器的权限。我可以尝试这样做,但粗略地看一下就表明这是不可能的


但是,您可以使用或命令获取远程端的文件列表,然后在循环中获取每个文件。

用凭据替换主机、用户和密码, 和“public_html/soleil”,其中包含要下载的PDF文件所在的目录地址, 在下面的代码中,我认为应该可以

from ftplib import *
from os import listdir
from os.path import getsize


ftp_dt = FTP(host,user,password)
ftp_pi = FTP(host,user,password)
print '\n- Ouverture de connection et logging : OK'


ftp_dt.cwd('public_html/soleil')
ftp_pi.cwd('public_html/soleil')


def func(content, li = [0], la = [], si = [0], memname = ['']):
    if name!=memname[0]:
        memname[0],li[0:1],la[:],si[0:1] = name,[0],[],[0]
    li[0] = li[0] + 1
    si[0] = si[0] + len(content)
    la.append(str(len(content)))
    if li[0]%8==0:
        print '  '.join(la) +\
              '   total: '+str(li[0])+' chunks,  '+str(si[0])+' bytes'
        la[:] = []
    f.write(content)


li_files = []
for name in ftp_dt.nlst():
    try:
        ftp_dt.size(name)
        if name not in ('.','..') and name[-4:]=='.pdf':
            li_files.append(name)
    except:
        pass


if li_files:
    for name in li_files:
        print '\n- Downloading  '+name

        with open('E:\\PDF\\DOWNS\\'+name,'wb') as f:
            ftp_pi.retrbinary('RETR '+name,func)

        if getsize('E:\\PDF\\DOWNS\\'+name)==ftp_dt.size(name):
            print '   OK !  Download of complete  '+repr(name)+'  SUCCEEDED'
        else:
            print '   FAILURE !! :  '+name+'  only partially downloaded'
else:
    print '\nThere is no PDF file in this FTP directory'


ftp_dt.quit()
ftp_pi.quit()
为“数据传输”和“协议解释”定义了两个连接ftp_dtftp_pi,因为ftp协议基于两个通道,一个用于命令,另一个用于…猜怎么着

函数func()在函数retrbinary()中用作回调函数

可能只是

def func(content):
    f.write()
但是我对函数的默认变量的可能性做了一些研究


有一件事我不太明白:当func()中的f引用仅在func()定义之后的代码文本中定义时,该代码如何工作。但我测试了它,它运行正常!

使用两个python模块
glob
wget
。您的代码片段可能如下所示

import glob
import wget

list_to_download = glob.glob(url+'*.pdf')

for file in list_to_download:
    wget.download(file)

这是我正在寻找的东西,这是我正在寻找的东西,这是我正在寻找的东西,这是我能够做这件事,为了循环,如果我得到详细的PDF文件的PDF文件的详细信息,如果我能够在FTP中得到PDF文件的PDF文件的详细信息,我能够做这个循环,如果我能得到PDF中的PDF文件的PDF.A A=('111.111.PDF,222.PDF,222.PDF,333.PDF,3.PDF,,,,,,3.3.PDF,3.PDF,3.PDF,,,,,,,,,,,,,3.3.PDF,,,,,,,,,,,,,,,,3.3.PDF,,,,,,,,,,,,,,,,,,,444.3.PDF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,444.4.PDF.write)除外:打印“错误”