抱歉,我对Python很新。我可以使用Python中的ftplib从FTP下载文件,但这就像我硬编码文件的名称(R.pdf)和仅下载(R.pdf),有没有办法下载使用Python将FTP扩展名为.PDF的所有文件到本地系统。我可以通过使用* .pdf
在Shell中完成此操作答案 0 :(得分:3)
用您的凭据替换主机,用户和密码, 和'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_dt 和 ftp_pi ,因为FTP协议基于两个通道,一个用于命令,另一个用于命令为.....猜猜是什么?
func()函数在函数 retrbinary()
中用作回调函数可能只是
def func(content):
f.write()
但我玩了一下函数默认变量的可能性。
我不太了解的一件事:如果 func()中的参考 f 仅在定义后的代码文本中定义,此代码如何工作? func()。但我测试了它,它的确有效!
答案 1 :(得分:1)
我无法访问FTP
服务器我可以试试这个,但粗略看一下documentation表示这是不可能的。
答案 2 :(得分:0)
使用两个python模块glob
和wget
。您的代码段可能看起来像这样
import glob
import wget
list_to_download = glob.glob(url+'*.pdf')
for file in list_to_download:
wget.download(file)