我正在使用以下Python脚本通过FTP下载文件。我想要的是在下载时查看进度的详细信息。为此,我使用了ProgressBar它,但没有显示任何内容。
这是我的代码:
import re
import os
import ftplib
import ntpath
import sys
import time
from progressbar import AnimatedMarker, Bar, BouncingBar, Counter, ETA, \
AdaptiveETA, FileTransferSpeed, FormatLabel, Percentage, \
ProgressBar, ReverseBar, RotatingMarker, \
SimpleProgress, Timer, UnknownLength
ftp = ftplib.FTP("Your IP address")
ftp.login("Username", "password")
files = []
try:
ftp.cwd("/feed_1")
files = ftp.nlst()
for fname in files:
res = re.findall("2018-07-25", fname)
if res:
print 'Opening local file ' + ntpath.basename(fname)
file = open(ntpath.basename(fname), 'wb')
print 'Getting ' + ntpath.basename(fname)
try:
widgets …Run Code Online (Sandbox Code Playgroud) 我一直使用一个非常简单的批处理文件从UNIX ftp服务器下载数百万个文件多年
login
passwd
ascii
prompt n
cd to the right directory
get some_file
get another_file
cd to the next directory
repeat the pattern
Run Code Online (Sandbox Code Playgroud)
关于这一点的好处是它很简单,并且所有文件都使用Window的换行符到达,因此文件已准备好与我现有的程序一起使用.由于我的路由器发生了一些变化,我不得不编写一个Python脚本来提取文件 - 我的第一个版本的脚本非常简单 - 但它的工作原理
for key in key_filings:
for filing in key_filings[key]:
remote_directory = '/foo/bar/' + key + '/' + filing['key_number']
ftp.cwd(remote_directory)
text_file = filing['txt']
ftp.retrlines('RETR '+ text_file, open(save_dir + text_file,'w').writelines)
hdr_file = filing['hdr']
ftp.retrlines('RETR ' + hdr_file, open(save_dir + hdr_file,'w').writelines)
Run Code Online (Sandbox Code Playgroud)
但是,文件没有任何明显的换行符.这些文件存储在unix系统中.在我使用Windows CMD shell下载文件之前,换行符就在那里.我已经尝试发送ASCII命令,但正如预期的那样没有任何影响.
至关重要的是,我能够访问最初存在的换行符,因为我的一些代码处理是基于行的.
当我从iPython 0.13运行此代码时:
import ftplib
f=ftplib.FTP('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:gaierror:[Errno 8]提供nodename或servname,或者未知
完整错误如下.我在Mac OS X v10.7.5(Lion)上运行python 2.7.1.我做了一些搜索,似乎在其他情况下产生了类似的错误.奇怪的是我能做到的
import urllib2
tt= urllib2.urlopen('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/')
Run Code Online (Sandbox Code Playgroud)
并且它可以工作但是如果我可以使用FTP函数,我可以避免解析urlopen,因为我的最终目标是选择目录的子集并下载它们的内容.
知道如何解决或绕过这个错误吗?提前致谢
---------------------------------------------------------------------------
gaierror Traceback (most recent call last)
<ipython-input-2-91f3bda2d528> in <module>()
----> 1 f=ftplib.FTP('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/')
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in __init__(self, host, user, passwd, acct, timeout)
115 self.timeout = timeout
116 if host:
--> 117 self.connect(host)
118 if user:
119 self.login(user, passwd, acct)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in connect(self, host, port, timeout)
130 if timeout != -999:
131 self.timeout = timeout
--> 132 self.sock = socket.create_connection((self.host, self.port), self.timeout)
133 self.af …Run Code Online (Sandbox Code Playgroud) 我想使用python编写一些ftp程序。请帮助我在Windows 7中安装“ ftplib”。
我尝试安装它,但未成功。
我正在写入我要通过 FTP 访问的用户的主目录,因此权限应该不是问题。FTP 在 FileZilla 中运行。
我检查了 vsftp.conf 并进行了local_enable=YES更改
在带有 Python 2.4.4 的Debian4系统上(我无法升级它),我将此代码与 ftplib 一起使用
>>> f = ftplib.FTP('address', 'user', 'password')
>>> f.cwd('/home/user/some/dir/')
'250 Directory successfully changed.'
>>> myfile = '/full/path/of/file.txt'
>>> o = open(myfile, 'rb')
>>> f.storbinary('STOR ' + myfile, o)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/ftplib.py", line 415, in storbinary
conn = self.transfercmd(cmd)
File "/usr/lib/python2.4/ftplib.py", line 345, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/usr/lib/python2.4/ftplib.py", line 327, in …Run Code Online (Sandbox Code Playgroud) 当我尝试ftp.delete()从 ftplib 使用时,它会引发error_perm, resp:
>>> from ftplib import FTP
>>> ftp = FTP("192.168.0.22")
>>> ftp.login("user", "password")
'230 Login successful.'
>>> ftp.cwd("/Public/test/hello/will_i_be_deleted/")
'250 Directory successfully changed.'
>>> ftp.delete("/Public/test/hello/will_i_be_deleted/")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 520, in delete
resp = self.sendcmd('DELE ' + filename)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 243, in sendcmd
return self.getresp()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 218, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Delete operation failed.
Run Code Online (Sandbox Code Playgroud)
该目录存在,并且“用户”有足够的权限删除该文件夹。
该站点实际上是一个支持ftp的NAS(WD MyBookWorld)。 …
我是Python编程的新手.我的问题是,如何同时下载几个文件.不是逐个文件,而是同时从ftp上的一个目录.现在我使用这个脚本,但我不知道如何重建这段代码:
filenames = []
ftp.retrlines("NLST", filenames.append)
print filenames
print path
for filename in filenames:
local_filename = filename
print filename
print local_filename
f = open(local_filename, "wb")
s = ftp.size(local_filename)
sMB = s/(1024*1024)
print "file name: " + local_filename + "\nfile size: " + str(sMB) + " MB"
ftp.retrbinary("RETR %s" % local_filename, f.write)
print "\n Done :) "
time.sleep(2)
f.close()
ftp.quit() #closing connection
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
它工作正常,但不是我需要的.
我设法使用 curl 连接到 FTP 服务器并列出目录的内容out:
$ curl -v --insecure --ftp-ssl --user xxx:yyy blabla:990/out/
> AUTH SSL
< 234 Proceed with negotiation.
...
> USER xxx
< 331 Please specify the password.
> PASS yyy
< 230 Login successful.
> PBSZ 0
< 200 PBSZ set to 0.
> PROT P
< 200 PROT now Private.
> PWD
< 257 "/"
> CWD out
< 250 Directory successfully changed.
> EPSV
< 229 Entering Extended Passive Mode (|||51042|).
* …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以从最后一行(文件结尾)仅下载部分文件。就像文件超过40 MB,而我只想检索最后一块,假设是2042个字节。有可能使用python 3和ftplib来做到这一点吗?
ftplib ×9
python ×9
ftp ×6
download ×2
curl ×1
delete-file ×1
file ×1
linux ×1
networking ×1
newline ×1
progress-bar ×1
python-3.x ×1
simultaneous ×1