2010-05-26 6 views
10

मेरी पायथन 2 स्क्रिप्ट इस विधि का उपयोग करके अच्छी तरह से फाइल अपलोड करती है लेकिन पायथन 3 समस्याएं पेश कर रही है और मैं कहां फंस गया हूं कि आगे जाना है (googling ने मदद नहीं की है)।पायथन में ftplib के साथ बाइनरी फ़ाइल कैसे अपलोड करें?

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

त्रुटि मैं

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 

है मैं

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 

किसी को मुझ में बात कर सकते हैं मिल गया सही दिशा

+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 एफ़टीपी में दाखिल करने के लिए।

नोट:यह नहीं SFTP है - एफ़टीपी केवल

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