2013-07-03 7 views
12

मैं विंडोज सर्वर से एक यूनिक्स सर्वर पर फ़ाइल अपलोड करने की कोशिश कर रहा हूं (मूल रूप से एफ़टीपी करने की कोशिश कर रहा हूं)।एफ़टीपी अपलोड फाइलें पाइथन

Traceback (most recent call last): 
    File "Windows\folder\which\has\file\MyFile.py", line 11, in <module> 
    ftp.storbinary('RETR %s' % filename, open(filename, 'w').write) 
    File "windows\folder\Python\lib\ftplib.py", line 466, in storbinary 
    buf = fp.read(blocksize) 
AttributeError: 'builtin_function_or_method' object has no attribute 'read' 

इसके अलावा MyFile.py की सभी सामग्री हटा दिया गया: मैं नीचे

#!/usr/bin/python 
import ftplib 
import os 
filename = "MyFile.py" 
ftp = ftplib.FTP("xx.xx.xx.xx") 
ftp.login("UID", "PSW") 
ftp.cwd("/Unix/Folder/where/I/want/to/put/file") 
os.chdir(r"\\windows\folder\which\has\file") 
ftp.storbinary('RETR %s' % filename, open(filename, 'w').write) 

कोड मैं निम्न त्रुटि हो रही है इस्तेमाल किया है।

कोई भी सलाह दे सकता है कि क्या गलत हो रहा है। मैंने पढ़ा है कि FTP का उपयोग करके फ़ाइलों को अपलोड करने के लिए ftp.storbinary का उपयोग किया जाता है।

उत्तर

12

यदि आप गैर-बाइनरी फ़ाइल (टेक्स्ट फ़ाइल की तरह) को स्टोर करने की कोशिश कर रहे हैं तो इसे लिखने के बजाय मोड को पढ़ने की कोशिश करें।

ftp.storlines("STOR " + filename, open(filename, 'r')) 
एक बाइनरी फ़ाइल (कुछ भी पाठ संपादक में खोला नहीं जा सकता है कि) अपने में पढ़ने के लिए द्विआधारी मोड

ftp.storbinary("STOR " + filename, open(filename, 'rb')) 

भी अगर आप एफ़टीपी lib आप शायद चाहिए उपयोग करने की योजना को खोलने के लिए

एक ट्यूटोरियल के माध्यम से जाओ, मैं effbot से इस article की सिफारिश करेंगे।

+0

MyFile.py की सामग्री हटाई नहीं गई है। लेकिन मैं अभी भी त्रुटि का जिक्र कर रहा हूं। – misguided

+2

स्टोरलाइन का उपयोग मानता है कि माईफाइल एक टेक्स्ट फ़ाइल है। अन्य फ़ाइलों (छवियों, फिल्मों, अभिलेखागारों, मूल रूप से कुछ भी जिन्हें आप एक पाठ संपादक में नहीं खोल सकते हैं और पढ़ सकते हैं) के लिए आपको http: //bugs.python के अनुसार 'आर –

+0

' के बजाय 'आरबी' के साथ फ़ाइल को 'आरबी' के साथ खोलना चाहिए। .org/issue6822 गैर-बाइनरी फ़ाइलों को 'आरबी' ध्वज के साथ भी खोला जाना चाहिए, लेकिन उसके बाद भी 'storlines() 'के साथ अपलोड किया गया। बस 'आर' और 'टाइप स्ट्र' के साथ उस समस्या का सामना करना पड़ा लिंक प्रदान करने के लिए बफर एपी 'अपवाद का समर्थन नहीं करता है। –

3

फ़ाइल को ऑब्जेक्ट बनाने का प्रयास करें, ताकि आप इसे ऑपरेटन के अंत में बंद कर सकें।

myfile = open(filename, 'w') 
ftp.storbinary('RETR %s' % filename, myfile.write) 

और हस्तांतरण

myfile.close() 

इस के अंत में समस्या का समाधान नहीं हो सकता है, लेकिन यह मदद मिल सकती है।

+0

अभी भी वही त्रुटि है। – misguided

+0

आह, सुनने के लिए अच्छा है कि आप अंत में इसे बाहर निकाला! – mbdavis

8

दोनों सुझावों को संयुक्त किया गया। अंतिम उत्तर

#!/usr/bin/python 
import ftplib 
import os 
filename = "MyFile.py" 
ftp = ftplib.FTP("xx.xx.xx.xx") 
ftp.login("UID", "PSW") 
ftp.cwd("/Unix/Folder/where/I/want/to/put/file") 
os.chdir(r"\\windows\folder\which\has\file") 
myfile = open(filename, 'r') 
ftp.storlines('STOR ' + filename, myfile) 
myfile.close() 
+3

स्टोरलाइन का उपयोग मानता है कि Myfile एक टेक्स्ट फ़ाइल है। अन्य फ़ाइलों (छवियों, फिल्मों, अभिलेखागारों, मूल रूप से कुछ भी जिन्हें आप एक पाठ संपादक में नहीं खोल सकते हैं और पढ़ सकते हैं) के लिए आपको storbinary का उपयोग करना चाहिए और फ़ाइल को 'आर' –

+0

के बजाय 'आरबी' के साथ खोलना चाहिए, कम से कम वर्तमान संस्करण में, आप फ़ाइल भेजने के लिए बाइनरी मोड ('आरबी') में फ़ाइल खोलने की जरूरत है, अन्यथा आपको एक त्रुटि मिलती है। संपादित करें: यह नहीं पता था कि किसी ने पहले ही यह कहा है ^ –

संबंधित मुद्दे