这不会下载子目录的内容; 我怎么能这样做?
import ftplib
import configparser
import os
directories = []
def add_directory(line):
if line.startswith('d'):
bits = line.split()
dirname = bits[8]
directories.append(dirname)
def makeDir(archiveTo):
for dir in directories:
newDir = os.path.join(archiveTo, dir)
if os.path.isdir(newDir) == True:
print("Directory \"" + dir + "\" already exists!")
else:
os.mkdir(newDir)
def getFiles(archiveTo, ftp):
files = ftp.nlst()
for filename in files:
try:
directories.index(filename)
except:
ftp.retrbinary('RETR %s' % filename, open(os.path.join(archiveTo, filename), 'wb').write)
def runBackups():
#Load INI
filename = 'connections.ini'
config = configparser.SafeConfigParser()
config.read(filename)
connections = config.sections() …Run Code Online (Sandbox Code Playgroud) 我的python2脚本很好地使用这种方法上传文件,但是python3提出了问题,而我仍然坚持下一步去哪里(谷歌搜索没有帮助).
from ftplib import FTP
ftp = FTP(ftp_host, ftp_user, ftp_pass)
ftp.storbinary('STOR myfile.txt', open('myfile.txt'))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
Traceback (most recent call last):
File "/Library/WebServer/CGI-Executables/rob3/functions/cli_f.py", line 12, in upload
ftp.storlines('STOR myfile.txt', open('myfile.txt'))
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 454, in storbinary
conn.sendall(buf)
TypeError: must be bytes or buffer, not str
Run Code Online (Sandbox Code Playgroud)
我尝试将代码更改为
from ftplib import FTP
ftp = FTP(ftp_host, ftp_user, ftp_pass)
ftp.storbinary('STOR myfile.txt'.encode('utf-8'), open('myfile.txt'))
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了这个
Traceback (most recent call last):
File "/Library/WebServer/CGI-Executables/rob3/functions/cli_f.py", line 12, in upload
ftp.storbinary('STOR myfile.txt'.encode('utf-8'), open('myfile.txt'))
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 450, in storbinary
conn = self.transfercmd(cmd) …Run Code Online (Sandbox Code Playgroud) 我在python中使用pycurl通过ftp传输文件.我可以使用以下命令在远程服务器上自动创建缺少的目录:
c.setopt(pycurl.FTP_CREATE_MISSING_DIRS, 1)
Run Code Online (Sandbox Code Playgroud)
由于某些原因,我必须切换到ftplib.但我不知道如何在这里相同.是否有任何选项可以添加到storbinary函数来做到这一点?或者我必须手动创建目录?
我需要使用sFTP从主机下载文件.
你知道是否有可能使用python ftplib做到这一点?我在这里看到了一个例子,但当我尝试连接时,我收到了EOFError.
我试过这段代码:
import ftplib
ftp = ftplib.FTP()
ftp.connect( "1.2.3.4", "22" )
Run Code Online (Sandbox Code Playgroud)
此方法在很长一段时间后返回错误,因此我无法执行登录调用.我无法尝试构造函数,FTP([host[, user[, passwd[, acct[, timeout]]]]])因为我的端口是22但ftplib默认是21.
如果我按照这个例子
ftp = ftplib.FTP("1.2.3.4")
ftp = ftplib.FTP("1.2.3.4","22")
Run Code Online (Sandbox Code Playgroud)
我收到拒绝连接,所以我无法输入任何用户名密码.你能帮助我吗?非常感谢你
我正在尝试使用ftplib获取文件列表并下载自我上次检查以来的任何新文件.我到目前为止尝试运行的代码是:
#!/usr/bin/env python
from ftplib import FTP
import sys
host = 'ftp.***.com'
user = '***'
passwd = '***'
try:
ftp = FTP(host)
ftp.login(user, passwd)
except:
print 'Error connecting to FTP server'
sys.exit()
try:
ftp.retrlines('LIST')
except:
print 'Error fetching file listing'
ftp.quit()
sys.exit()
ftp.quit()
Run Code Online (Sandbox Code Playgroud)
每当我运行它时,当我尝试检索列表时它会超时.有任何想法吗?
我正在尝试使用Python将CSV文件加载到Amazon S3.我需要知道CSV文件的修改时间.我正在使用ftplib将FTP连接到Python(2.7).
我正在使用ftplib来传输文件.一切都很好.现在我想在下载之前获取目标文件的大小.
首先,我尝试使用ftp.size(filename)获取大小.服务器抱怨我不能在ascii模式下这样做.
然后我尝试使用ftp.sendcmd("binary")和ftp.sendcmd("bin")设置二进制模式.在这两种情况下,服务器抱怨"500二进制不理解"
在此实例中,ftplib可以在下载之前获取文件的大小吗?我不控制FTP服务器,也无法改变它的行为方式.
谢谢
我使用ftplib连接到ftp站点.我想获取最近上传的文件并下载它.我能够连接到ftp服务器并列出文件,我也将它们放在一个列表中并获得datefield转换.是否有任何功能/模块可以获取最近的日期并从列表中输出整行?
#!/usr/bin/env python
import ftplib
import os
import socket
import sys
HOST = 'test'
def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror), e:
print 'cannot reach to %s' % HOST
return
print "Connect to ftp server"
try:
f.login('anonymous','al@ge.com')
except ftplib.error_perm:
print 'cannot login anonymously'
f.quit()
return
print "logged on to the ftp server"
data = []
f.dir(data.append)
for line in data:
datestr = ' '.join(line.split()[0:2])
orig-date = time.strptime(datestr, '%d-%m-%y %H:%M%p')
f.quit()
return
if __name__ == '__main__':
main() …Run Code Online (Sandbox Code Playgroud) 我试图从FTP服务器读取文件.该文件是一个.gz文件.我想知道在套接字打开时是否可以对此文件执行操作.我尝试按照两个StackOverflow问题中提到的内容来阅读文件而无需写入磁盘并从FTP读取文件而不下载但未成功.
我知道如何在下载的文件中提取数据/工作,但我不确定我是否可以动态执行.有没有办法连接到网站,在缓冲区中获取数据,可能做一些数据提取和退出?
尝试StringIO时出现错误:
>>> from ftplib import FTP
>>> from StringIO import StringIO
>>> ftp = FTP('ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/PMC-ids.csv.gz')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
ftp = FTP('ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/PMC-ids.csv.gz')
File "C:\Python27\lib\ftplib.py", line 117, in __init__
self.connect(host)
File "C:\Python27\lib\ftplib.py", line 132, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "C:\Python27\lib\socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno 11004] getaddrinfo failed
Run Code Online (Sandbox Code Playgroud)
我只需要知道如何将数据放入某个变量并在其上循环,直到读取FTP文件为止.
感谢您的时间和帮助.谢谢!
我有一个FTP连接,我从中下载许多文件并在其间处理它们.我希望能够检查我的FTP连接之间没有超时.所以代码看起来像:
conn = FTP(host='blah')
conn.connect()
for item in list_of_items:
myfile = open('filename', 'w')
conn.retrbinary('stuff", myfile)
### do some parsing ###
Run Code Online (Sandbox Code Playgroud)
如何在### do some parsing ###线路超时的情况下检查我的FTP连接?