【问题标题】:writing to a file via FTP in python在 python 中通过 FTP 写入文件
【发布时间】:2009-06-10 03:24:13
【问题描述】:

所以我关注了此页面上的文档: http://docs.python.org/library/ftplib.html#ftplib.FTP.retrbinary

也许我对“retrbinary”的作用感到困惑......我认为它会检索一个二进制文件,然后我可以从那里打开它并写入该文件。

这是给我带来问题的行...

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write)    

我不明白的是我想写到 temp.txt,所以我在尝试

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write('some new txt'))    

但我遇到了错误,我能够建立一个 FTP 连接,执行 pwd()、cwd()、rename() 等操作。

附言我正在尝试尽可能多地用谷歌搜索,谢谢!

【问题讨论】:

  • “检索一个二进制文件,我可以从那里打开它并写出该文件”不是很清楚。您能否通过逐步列出您想要做的事情的清单对此进行扩展?从 cmets 来看,您完全不清楚您想要做什么以及您在使用 ftplib 时遇到了什么问题。

标签: python ftp ftplib


【解决方案1】:

看起来原始代码应该可以工作,如果您尝试从服务器下载文件retrbinary 命令接受你指定的函数对象(即函数名,后面没有());每当有一段数据(二进制文件)到达时都会调用它。在这种情况下,它将调用您opened 文件的write 方法。这与retrlines 略有不同,因为retrlines 将假定数据是文本文件,并将适当地转换换行符(但会损坏,例如图像)。

通过进一步阅读,您似乎正在尝试写入服务器上的文件。在这种情况下,您需要传递一个文件对象(或其他具有 read 方法的对象,其行为类似于文件)以供 store 函数调用:

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb"))

【讨论】:

  • 是的,我正在尝试写入服务器上的文件,但现在我认为这可能是错误的方法......我应该只在本地创建文件然后发送/一旦文件被写入/创建就上传文件,这样它应该最小化连接时间。
  • 这将是写入服务器上文件的最简单方法。最初,我以为您正在尝试从服务器下载文件。我已经更新了我的答案,以澄清您拥有的代码(在第一个块中)实际上做了什么。
【解决方案2】:

ftp.retrbinary 将第二个参数作为回调函数 可以直接是文件对象的write方法,即open('temp.txt','wb').write 但是你直接调用 write

您可以提供自己的回调并对数据做任何您想做的事情

def mywriter(data):
    print data
ftp.retrbinary('RETR temp.txt', mywriter)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2012-09-18
    相关资源
    最近更新 更多