我正在学习使用 ftplib 从此链接从 ftp 服务器检索文件:https://docs.python.org/2/library/ftplib.html
当我运行这段代码时
from ftplib import FTP
ftp = FTP('ftp.debian.org')
ftp.login()
Run Code Online (Sandbox Code Playgroud)
我明白了
TimeoutError: [WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立的连接失败
从这个答案/sf/ask/346287231/# =我知道这是一个服务器端问题,可以通过更改为ACTV模式来解决。
所以我将代码更改为
from ftplib import FTP
ftp = FTP()
ftp.set_pasv(True)
ftp.connect('ftp.debian.org')
ftp.login()
Run Code Online (Sandbox Code Playgroud)
还是同样的错误。谁能告诉我我的问题还有哪些其他原因?
编辑 - 在 64 位 Win 10 环境中在 Thonny(IDE) 上使用 Python 3.6.1
我正在尝试将文件上传到 FTP。/public_html我正在尝试上传文件,files.000webhost.com但我不断收到 ftplib.error_perm: 500 Unknown command
我的代码如下:
import ftplib
session = ftplib.FTP('files.000webhost.com','hazaaay','dwadawdadw')
file = r'C:\\Users\\Downloads\\A csv\\a csv1.csv','b' # file to send
session.storbinary('a csv1.csv', file) # send the file
file.close() # close file and FTP
session.quit()
Run Code Online (Sandbox Code Playgroud)
尽管提供了未解决的参考,但它在控制台中表示该进程以退出代码 0 结束,尽管它没有显示在 FileZilla 中。有任何想法吗?谢谢。
使用 Python 3.6.3。
我正在连接到 FTP 以ftplib通过 FTP_TLS使用。
ftps = ftplib.FTP_TLS('example.com', timeout=5)
# TLS is more secure than SSL
ftps.ssl_version = ssl.PROTOCOL_TLS
# login before securing control channel
ftps.login('username@example.com', 'password')
# switch to secure data connection
ftps.prot_p()
# Explicitly set Passive mode
ftps.set_pasv(True)
Run Code Online (Sandbox Code Playgroud)
这一切都有效。我可以发送ftps.mkd('mydir')(制作目录)和ftps.cwd('mydir')(更改工作目录),并且都可以正常工作。
但是,如果我发送其中任何一个(据我所知,它们基本上都是同义词):
ftps.dir()
ftps.nlst()
ftps.retrlines('LIST')
ftps.retrlines('MLSD')
Run Code Online (Sandbox Code Playgroud)
然后我得到一个异常(下面还包括所有 ftplib 调试信息;通常也与 FileZilla 显示的内容相匹配):
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH TLS OK.\n'
*resp* '234 AUTH TLS OK.'
*cmd* 'USER username@example.com' …Run Code Online (Sandbox Code Playgroud) 我一直在使用ls = f.mlsd()从 ftp 获取文件列表和时间戳,但它给了我
ftplib.error_perm: 500 Unknown command
Run Code Online (Sandbox Code Playgroud)
ftp服务器有问题吗?我需要在服务器上安装任何东西才能让这个命令工作吗
我的应用程序需要从远程 FTP 下载所有目录,我正在第一次测试 Python 的ftplib.
当我尝试使用命令列出远程 FTP 中的所有目录时,ftp.nlst()它返回一个空列表。我确信该目录不为空,因为此命令:ftp.retrlines('list')返回一个显示目录内子文件夹名称的对象。
在测试时,我尝试了其他命令,例如ftp.cwd('/other-dir/')或ftp.pwd(),但这些命令似乎都不起作用。
这是我用来显示子目录列表的代码:
from ftplib import FTP
def ftpConnection():
ftp = FTP('ftp-address')
ftp.login('user', 'password')
lista = ftp.nlst()
return (lista)
print(ftpConnection())
Run Code Online (Sandbox Code Playgroud)
输出:
[]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该列表是空的。
这是我的代码retrlines:
def ftpConnection():
ftp = FTP('remoteFtp')
ftp.login('user', 'password')
ftp.retrlines('LIST')
print (ftpConnection())
Run Code Online (Sandbox Code Playgroud)
输出:
from ftplib import FTP
def ftpConnection():
ftp = FTP('ftp-address')
ftp.login('user', 'password')
lista = ftp.nlst()
return (lista)
print(ftpConnection())
Run Code Online (Sandbox Code Playgroud)
这是命令行的输出ftp:
[]
Run Code Online (Sandbox Code Playgroud)
def ftpConnection():
ftp = FTP('remoteFtp') …Run Code Online (Sandbox Code Playgroud) 我想在 FTP 目录中添加新文件后立即将文件从 FTP 服务器获取到本地。
我知道可以使用看门狗观察器看到本地计算机上目录的更改。
但我想检查 FTP 服务器上目录的更改(添加新文件、删除文件)。
如何实现这一目标?
我用来检查本地计算机上目录更改的代码:
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import ftplib
import time
class ExampleHandler(FileSystemEventHandler):
def on_created(self, event):
print "Got event for file %s" % event.src_path
session = ftplib.FTP('address','username','password')
path='/directory/to/check'
session.cwd(path)
observer = Observer()
event_handler = ExampleHandler()
observer.schedule(event_handler, path_of_the_directory)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Run Code Online (Sandbox Code Playgroud) 我正在使用 python 从 ftp 服务器下载文件,我能够下载文件,但是当我打开文件时,它们似乎已损坏或无法打开歌曲或 jpg 等文件工作正常,但文档、Excel 表格、pdf 和文本文件下载不正确。
以下是我的代码:
from ftplib import FTP
ftp = FTP()
ftp.connect(ip_address,port)
ftp.login(userid,password)
direc='directory path'
ftp.cwd(direc)
doc='doc.txt' or xlsx or pdf or jpg etc
download_path='path to download file on desktop'
file=open(download_path+ doc,'wb')
ftp.retrbinary(f"RETR {doc}", file.write)
Run Code Online (Sandbox Code Playgroud)
我能够下载所需的文件,但其中大部分都需要损坏。我应该进行哪些更改才能使代码正常工作。
我在 FTP 服务器上的目标文件是 ZIP 文件,.CSV 位于更远的两个文件夹中。
我如何才能使用 BytesIO 让 pandas 读取 csv 而无需下载它?
这是我到目前为止所拥有的:
ftp = FTP('FTP_SERVER')
ftp.login('USERNAME', 'PASSWORD')
flo = BytesIO()
ftp.retrbinary('RETR /ParentZipFolder.zip', flo.write)
flo.seek(0)
Run Code Online (Sandbox Code Playgroud)
作为flo我感兴趣的 BytesIO 对象,我如何能够在对象内向下导航几个文件夹,以允许 pandas 读取我的 .csv 文件?这还有必要吗?
我正在尝试使用 python 库“ftplib”。使用“Go --> Connect to Server...”下的查找器设置,我可以很好地连接到 MacBook 上的 FTP 服务器
当我在 jupyter 笔记本中使用 ftplib 时,它返回错误消息:
error_perm: 530 登录名或密码不正确!
这是我的代码:
from ftplib import FTP
ftp = FTP(host='ipaddress', user='myusername', passwd='mypassword')
Run Code Online (Sandbox Code Playgroud)
其中host是FTP服务器的IP地址,user是我的用户名,passwd是我得到的密码。感谢您的任何帮助。