嗨,我正在使用模块ftplib.并使用以下代码列出我的文件:
files=[]
files = ftp.nlst()
Run Code Online (Sandbox Code Playgroud)
并使用以下代码将它们写入文本文件:
for item in files:
filenames.write(item +'\n')
Run Code Online (Sandbox Code Playgroud)
但是有一个编码问题,如果我的文件名有'ı,ğ,ş'字符,它无法读取这个并写入文件'?' 代替.
如何正确阅读?
我正在使用Python ftplib开发一个FTP客户端.如何添加代理支持(我见过的大多数FTP应用程序似乎都有)?我特别想到SOCKS代理,还有其他类型...... FTP,HTTP(甚至可以在FTP程序中使用HTTP代理吗?)
有什么想法怎么做?
我想从一个ftp站点向另一个ftp站点发送带有python ftplib的文件,以避免文件读/写过程.
我创建了一个BytesIO流:
myfile=BytesIO()
Run Code Online (Sandbox Code Playgroud)
我使用retrbinary成功从ftp站点检索图像文件:
ftp_one.retrbinary('RETR P1090080.JPG', myfile.write)
Run Code Online (Sandbox Code Playgroud)
我可以将此内存对象保存为常规文件:
fot=open('casab.jpg', 'wb')
fot=myfile.readvalue()
Run Code Online (Sandbox Code Playgroud)
但我无法通过ftp与storbinary发送此流.我认为这会奏效:
ftp_two.storbinary('STOR magnafoto.jpg', myfile.getvalue())
Run Code Online (Sandbox Code Playgroud)
但不是.我得到一个很长的错误消息msg结尾'buf = fp.read(blocksize)AttributeError:'str'对象没有属性'read'
我也试过很多荒谬的组合,但没有成功.顺便说一句,我对myfoto.write真正做的事情也很困惑.不应该是myfoto.write()吗?
我对这个缓冲器的功能或要求也很无能为力.我想要的实现太复杂了吗?我应该在系统中使用中间写/读来ping文件吗?所有
编辑:感谢abanert,我把事情做好了.对于记录,storbinary参数是错误的,并且在发送之前需要myfile.seek(0)来"回放"流.这是一个工作片段,可以在两个ftp地址之间移动文件而无需中间物理文件写入:
import ftplib as ftp
from io import BytesIO
ftp_one=ftp.FTP(address1, user1, pass1)
ftp_two=ftp.FTP(address2, user2, pass2)
myfile=BytesIO()
ftp_one.retrbinary ('RETR imageoldname.jpg', myfile.write)
myfile.seek(0)
ftp_two.storbinary('STOR imagenewname.jpg', myfile)
ftp_one.close()
ftp_two.close()
myfile.close()
Run Code Online (Sandbox Code Playgroud) 我有一个要求,我必须从FTP文件夹中提取最新的文件,问题是文件名有空格,文件名具有特定的模式.以下是我实施的代码:
import sys
from ftplib import FTP
import os
import socket
import time
import pandas as pd
import numpy as np
from glob import glob
import datetime as dt
from __future__ import with_statement
ftp = FTP('')
ftp.login('','')
ftp.cwd('')
ftp.retrlines('LIST')
filematch='*Elig.xlsx'
downloaded = []
for filename in ftp.nlst(filematch):
fhandle=open(filename, 'wb')
print 'Getting ' + filename
ftp.retrbinary('RETR '+ filename, fhandle.write)
fhandle.close()
downloaded.append(filename)
ftp.quit()
Run Code Online (Sandbox Code Playgroud)
我知道我可以在ftp.dir()命令中添加一个空列表,但由于文件名有空格,我无法以正确的方式拆分它并选择我上面提到的类型的最新文件.
任何帮助都会很棒.
我正在编写一个使用FTPLib来获取文件的模块.我想找到一种方法将值(除了块)传递给回调.基本上,我的回调是
def handleDownload(block, fileToWrite):
fileToWrite.write(block)
Run Code Online (Sandbox Code Playgroud)
我需要打电话
ftp.retrbinary('RETR somefile', handleDownload)
Run Code Online (Sandbox Code Playgroud)
并让它传递文件句柄.有没有办法做到这一点?
所以,我正在尝试连接到ftp服务器以获取目录列表和下载文件.但是prot_p()函数之后的第一个命令引发了异常 - 从日志中产生这些错误:
*get* '150 Here comes the directory listing.\r\n'
*resp* '150 Here comes the directory listing.'
*get* '522 SSL connection failed; session reuse required: see require_ssl_reuse
option in vsftpd.conf man page\r\n'
*resp* '522 SSL connection failed; session reuse required: see require_ssl_reuse
option in vsftpd.conf man page'
Traceback (most recent call last):
File "C:\temp\download.py", line 29, in <module>
files = ftps.dir()
File "C:\Python27\lib\ftplib.py", line 522, in dir
self.retrlines(cmd, func)
File "C:\Python27\lib\ftplib.py", line 725, in retrlines
return self.voidresp()
File "C:\Python27\lib\ftplib.py", line …Run Code Online (Sandbox Code Playgroud) 我是 Python 新手,我正在尝试列出 FTP 中所有子目录中的所有文件。FTP 和往常一样,就是这种格式。
A
B
C
Run Code Online (Sandbox Code Playgroud)
子目录:
AA
BB
CC
Run Code Online (Sandbox Code Playgroud)
['A', 'B', 'C']我可以使用列出目录ftp.nlist()。我想得到['AA', 'BB', 'CC']我的输出。我已经尝试并查找了很多以找到解决方案/提示来执行此操作。
我正在试图设置FTP连接的超时时间:
class ftplib.FTP([host [,user [,passwd [,acct [,timeout]]]]])
返回FTP类的新实例.当给出主机时,方法调用connect(host).当给出用户时,另外调用login(user,passwd,acct)方法(其中passwd和acct默认为空字符串,如果没有给出).可选的timeout参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置).
问题是我创建连接的代码如下:
from ftplib import FTP
ftp = FTP('172.16.52.87')
ftp.login('username', 'password')
Run Code Online (Sandbox Code Playgroud)
如果我使用,我发现了一些问题:
ftp = FTP('172.16.52.87', 'username', 'password')
Run Code Online (Sandbox Code Playgroud)
然后我的问题是,如何设置超时?
我试过让一些参数为空但它不起作用:
ftp = FTP('172.16.52.87', '', '', '', '100')
Run Code Online (Sandbox Code Playgroud)
登录功能只有3个参数 login(user, passwd, acct)
有些想法?
问候
我已经连接到FTP并且连接成功。
import ftplib
ftp = ftplib.FTP('***', '****','****')
listoffiles = ftp.dir()
print (listoffiles)
Run Code Online (Sandbox Code Playgroud)
我在此 FTP 中有一些 CSV 文件以及一些包含更多 CSV 的文件夹。
我需要识别此位置(主页)中的文件夹列表,并且需要导航到这些文件夹。我认为cwd命令应该有效。
我还读取了此 FTP 中存储的 CSV。我怎样才能做到这一点?有没有办法直接将 CSV 加载到 Pandas 中?
我正在尝试连接到 FTP,但无法运行任何命令。
ftp_server = ip
ftp_username = username
ftp_password = password
ftp = ftplib.FTP(ftp_server)
ftp.login(ftp_username, ftp_password)
'230 Logged on'
ftp.nlst()
Run Code Online (Sandbox Code Playgroud)
将ftp.nlst引发此错误:
错误:
[WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者因为连接的主机没有响应而建立连接失败
我已经使用 FileZilla(在同一台机器上运行)测试了连接,它工作正常。
这是 FileZilla 日志:
ftp_server = ip
ftp_username = username
ftp_password = password
ftp = ftplib.FTP(ftp_server)
ftp.login(ftp_username, ftp_password)
'230 Logged on'
ftp.nlst()
Run Code Online (Sandbox Code Playgroud)