2010-05-26 6 views
10

내 python2 스크립트는이 방법을 사용하여 파일을 멋지게 업로드하지만 python3은 문제를 제시하고 다음으로 (googling은 도움이되지 않았다) 어디로 가야할지 고민 중입니다.파이썬에서 ftplib로 바이너리 파일을 업로드하는 방법은 무엇입니까?

from ftplib import FTP 
ftp = FTP(ftp_host, ftp_user, ftp_pass) 
ftp.storbinary('STOR myfile.txt', open('myfile.txt')) 

내가 오류 내가

from ftplib import FTP 
ftp = FTP(ftp_host, ftp_user, ftp_pass) 
ftp.storbinary('STOR myfile.txt'.encode('utf-8'), open('myfile.txt')) 

에 코드를 변경하려하지만 그 대신 나는이

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) 
    File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 358, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
    File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 329, in ntransfercmd 
    resp = self.sendcmd(cmd) 
    File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 244, in sendcmd 
    self.putcmd(cmd) 
    File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 179, in putcmd 
    self.putline(line) 
    File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/ftplib.py", line 172, in putline 
    line = line + CRLF 
TypeError: can't concat bytes to str 

누군가가 날 지점 수있어

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 

입니다 오른쪽 방향

+0

아무것도 py3k 독점이 질문에 대해이 있습니다. – SilentGhost

+1

그것은 독점적 인 py3k가 아니지만 동일한 코드가 문자열 인코딩과 관련하여 갑자기 오류를 던졌던 것 (그리고 그렇게 대답하는 것이 맞았습니다. – Teifion

답변

29

문제는 명령 인수가 아니라 파일 개체와 관련이 있습니다. 바이너리를 저장하고 있기 때문에 당신은 'rb' 플래그를 사용하여 파일을 열 필요가 :

>>> ftp.storbinary('STOR myfile.txt', open('myfile.txt', 'rb')) 
'226 File receive OK.' 
+0

현재 직장에서, 내가 집에 돌아 왔을 때 그것을 시험 할 것이고, 모든 것이 웅장 할 것이기를 바랍니다. 감사합니다! – Teifion

1

APPEND이 FTP로 파일에.

참고 :그건하지 SFTP - FTP 만

import ftplib 
ftp = ftplib.FTP('localhost') 
ftp.login ('user','password') 
fin = open ('foo.txt', 'r') 
ftp.storbinary ('APPE foo2.txt', fin, 1) 

참조 : Thanks to Noah

관련 문제