запись в файл через FTP в python - PullRequest
1 голос
/ 10 июня 2009

Итак, я следил за документами на этой странице: 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 () и т. Д.

p.s. я пытаюсь гуглить это как можно больше, спасибо!

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

Похоже, оригинальный код должен был сработать, , если вы пытались загрузить файл с сервера . Команда retrbinary принимает указанный вами объект функции (то есть имя функции без () после него); он вызывается всякий раз, когда приходит часть данных (двоичный файл). В этом случае он вызовет метод write файла, который вы open редактируете. Это немного отличается от retrlines, потому что retrlines будет предполагать, что данные представляют собой текстовый файл, и будет соответствующим образом преобразовывать символы новой строки (но повреждать, скажем, изображения).

При дальнейшем чтении похоже, что вы пытаетесь записать файл на сервере. В этом случае вам нужно передать файловый объект (или какой-либо другой объект с методом read, который ведет себя как файл) для вызова функцией store:

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb"))
0 голосов
/ 10 июня 2009

ftp.retrbinary принимает второй аргумент в качестве функции обратного вызова это может быть непосредственно метод записи объекта файла i.e.open ('temp.txt', 'wb'). write но вместо этого вы звоните пишите прямо

вы можете предоставить свой собственный обратный вызов и делать с данными все, что вы хотите

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