2010-12-22 86 views
1

对不起,我对Python很新。我能够使用Python中的ftplib从FTP下载文件,但这就像我硬编码名称的文件名(R.pdf),这只下载(R.pdf),有没有办法下载FTP中扩展名为.PDF的所有文件使用Python发送到本地系统。我可以在Shell中使用* .pdf使用Python脚本从FTP下载.pdf文件

回答

3

与您的凭据, 并与它们要在下面的代码被下载, 的PDF文件的目录的地址“的public_html /马戏团”,它应该是好的,我更换主机,用户名和密码认为。

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() 

两个CONNEXIONS ftp_dtftp_pi针对“数据传输”和“协议解释”限定,因为FTP协议是基于两个通道,一个用于命令和另一个用于.....你猜怎么了 ?

FUNC()函数用作回调在fonction retrbinary()

这可能只是

def func(content): 
    f.write() 

,但我打得有点用的默认变量的可能性一个函数。

有一件事我不明白得好:怎么能这样的代码工作,而在FUNC参考˚F()只在代码的文本FUNC()的定义之后定义。但我测试了它,它的工作原理!

+0

感谢队友,这是我一直在寻找的 – Rakesh 2010-12-23 14:52:23

1

我无法访问FTP服务器我可以试试这个,但粗略看一下documentation表明这是不可能的。

但是,您可以通过dirnlst命令获取远程端的文件列表,然后以循环方式获取每个文件。

+0

如果我在FTP中获得PDF文件的详细信息,我可以使用for循环执行此操作。 A =('111.pdf','222.pdf','333.pdf','444.pdf') ftp = ftplib.FTP(“###。###。###。 ###“) ftp.login(”*********“,”***********“) ftp.cwd(”/ Dir“) for我答: 尝试: ftp.retrbinary( “RETR” + I,打开(我, 'WB')编写。) 除了: 打印 “错误” – Rakesh 2010-12-23 14:53:14