एफ़टीपी के माध्यम से पायथन स्क्रिप्ट अपलोडिंग फाइलें


86

मैं एफ़टीपी पर फ़ाइल अपलोड करने के लिए एक स्क्रिप्ट बनाना चाहूंगा।

लॉगिन सिस्टम कैसे काम करेगा? मैं कुछ इस तरह की तलाश में हूँ:

ftp.login=(mylogin)
ftp.pass=(mypass)

और क्रेडेंशियल्स में कोई अन्य संकेत।

जवाबों:


196

उपयोग करें ftplib, आप इसे इस तरह लिख सकते हैं:

import ftplib
session = ftplib.FTP('server.address.com','USERNAME','PASSWORD')
file = open('kitten.jpg','rb')                  # file to send
session.storbinary('STOR kitten.jpg', file)     # send the file
file.close()                                    # close file and FTP
session.quit()

का प्रयोग करें ftplib.FTP_TLSबजाय यदि आप FTP होस्ट टीएलएस की आवश्यकता है।


इसे पुनः प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं urllib.retrieve:

import urllib 

urllib.urlretrieve('ftp://server/path/to/file', 'file')

संपादित करें :

वर्तमान निर्देशिका का पता लगाने के लिए, उपयोग करें FTP.pwd():

FTP.pwd (): सर्वर पर वर्तमान निर्देशिका का पथनाम लौटाएँ।

निर्देशिका को बदलने के लिए, उपयोग करें FTP.cwd(pathname):

FTP.cwd (पथनाम): सर्वर पर वर्तमान निर्देशिका सेट करें।


1
@DawsonHensel आप print ftp.pwd()जिस वर्तमान पथ पर हैं, उसका उपयोग कर सकते हैं।
KZ सिप

कुछ अजीब व्यवहार है, मैं अपने सर्वर को कमांड लाइन से अपलोड कर सकता हूं और फाइल अपलोड कर सकता हूं लेकिन ftplib के साथ नहीं, कनेक्शन बस कुछ समय के लिए खुला है और फिर सॉकेट त्रुटि है। क्या वजह हो सकती है ?
89n3ur0n

नमस्ते, मैं जानना चाहता हूं कि क्या यह संभव है कि
बजे

18

ftplib अब संदर्भ प्रबंधकों का समर्थन करता है इसलिए मुझे लगता है कि इसे और भी आसान बनाया जा सकता है

from ftplib import FTP
from pathlib import Path

file_path = Path('kitten.jpg')

with FTP('server.address.com', 'USER', 'PWD') as ftp, open(file_path, 'rb') as file:
        ftp.storbinary(f'STOR {file_path.name}', file)

फ़ाइल या सत्र को बंद करने की आवश्यकता नहीं है


1
अगर किसी के पास विंडोज से एफ़टीपी सर्वर पर स्वीकार किए गए उत्तर का उपयोग करके फ़ाइल अपलोड करने की समस्या है, तो यह विधि मेरे लिए काम करती है।
mKane848

मुझे दूरस्थ FTP सर्वर पर बाइनरी फ़ाइलों को अधिलेखित / अपडेट करने के लिए इसका उपयोग करने में समस्या थी - लेकिन यह ftp.storlines के माध्यम से पाठ फ़ाइलों के साथ अच्छी तरह से काम करता है ...
एडवर्ड

5

आप सबसे अधिक संभावना पायथन के लिए ftplib मॉड्यूल का उपयोग करना चाहते हैं

 import ftplib
 ftp = ftplib.FTP()
 host = "ftp.site.uk"
 port = 21
 ftp.connect(host, port)
 print (ftp.getwelcome())
 try:
      print ("Logging in...")
      ftp.login("yourusername", "yourpassword")
 except:
     "failed to login"

यह आपको एक FTP सर्वर में लॉग करता है। वहां से आप जो करते हैं वह आपके ऊपर है। आपका प्रश्न किसी भी अन्य ऑपरेशन को इंगित नहीं करता है जो वास्तव में करने की आवश्यकता है।


तद्ग, धन्यवाद। मेरे पास मुख्य चिंता एक साधारण बात है जो मुझे लॉग इन करती है, और मुझे नेकसरी फाइलें अपलोड करने देती है। इतना अस्पष्ट होने के लिए क्षमा करें।
निराश पाइथन कोडर

2
यह सवाल का जवाब नहीं देता है
जॉर्ज लेइताओ

4

इसे इस्तेमाल करे:

#!/usr/bin/env python

import os
import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username="username", password="password")
sftp = ssh.open_sftp()
localpath = '/home/e100075/python/ss.txt'
remotepath = '/home/developers/screenshots/ss.txt'
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()

4
प्रश्न एफ़टीपी के माध्यम से फ़ाइलों को स्थानांतरित करने के बारे में है, एसएफटीपी नहीं।
सैम होसेनी

सहमत हैं, अक्सर SSHException: Error reading SSH protocol banner" when using ProxyCommandइस मार्ग को ftp पर जाते समय त्रुटि मिलती है ।
बेनलॉपर

0

मैंने यहाँ एक समान प्रश्न का उत्तर दिया IMHO, यदि आपका एफ़टीपी सर्वर फैब्रिक के साथ संवाद करने में सक्षम है तो कृपया हमें फ़ैब्रिक दें। यह कच्चा करने से कहीं बेहतर है ftp

मेरे पास एक एफ़टीपी खाता है dotgeek.comइसलिए मुझे यकीन नहीं है कि यह अन्य एफ़टीपी खातों के लिए काम करेगा।

#!/usr/bin/python

from fabric.api import run, env, sudo, put

env.user = 'username'
env.hosts = ['ftp_host_name',]     # such as ftp.google.com

def copy():
    # assuming i have wong_8066.zip in the same directory as this script
    put('wong_8066.zip', '/www/public/wong_8066.zip')

फ़ाइल को सहेजें fabfile.pyऔर fab copyस्थानीय रूप से चलाएं ।

yeukhon@yeukhon-P5E-VM-DO:~$ fab copy2
[1.ai] Executing task 'copy2'
[1.ai] Login password: 
[1.ai] put: wong_8066.zip -> /www/public/wong_8066.zip

Done.
Disconnecting from 1.ai... done.

एक बार फिर, यदि आप हर समय पासवर्ड नहीं डालना चाहते हैं, तो बस जोड़ें

env.password = 'my_password'

1
जब तक मैं कपड़े के प्रलेखन में कुछ याद नहीं कर रहा हूँ, कपड़े एफ़टीपी का समर्थन नहीं करते हैं। आप शायद भाग्यशाली परिस्थितियों में हैं कि dotgeek.com SSH और FTP दोनों को समान क्रेडेंशियल्स का उपयोग करते हुए समर्थन करता है।
एपीकॉलीन

@Epcylon फैब्रिक SF31 - While the SFTP protocol (which put uses) लिंक
एलेक्स L

2
@AlexL सही है, लेकिन SFTP किसी भी तरह से FTP के समान नहीं है। वे एक ही उद्देश्य के लिए दो अलग-अलग प्रोटोकॉल हैं, लेकिन अगर आपको एफ़टीपी-सर्वर से कनेक्ट करने की आवश्यकता है, तो आप एक एसएफटीपी-क्लाइंट का उपयोग नहीं कर सकते हैं, और इसके विपरीत। विकिपीडिया : "एसएफटीपी एसएसएच पर एफ़टीपी रन नहीं है, बल्कि IETF SECSH वर्किंग ग्रुप द्वारा जमीन से तैयार किया गया नया प्रोटोकॉल। "
एपीकॉलीन

@ ईपायलिन युप! बस यह स्पष्ट करने की कोशिश कर रहा है कि फैब्रिक क्या उपयोग करता है। उम्मीद है कि ओपी (या भविष्य के पाठक) एफटीपी का उपयोग करने के बजाय अपने सर्वर में एसएफटीपी कर सकते हैं, कपड़े बहुत काम आते हैं।
एलेक्स एल

0

एन्क्रिप्शन त्रुटि प्राप्त करने से बचने के लिए आप नीचे दिए गए आदेशों को भी आज़मा सकते हैं

ftp = ftplib.FTP_TLS("ftps.dummy.com")
ftp.login("username", "password")
ftp.prot_p()
file = open("filename", "rb")
ftp.storbinary("STOR filename", file)
file.close()
ftp.close()

ftp.prot_p () सुनिश्चित करें कि आपके कनेक्शन एन्क्रिप्टेड हैं


-1

आप नीचे दिए गए फ़ंक्शन का उपयोग कर सकते हैं। मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन इसे ठीक काम करना चाहिए। याद रखें कि गंतव्य एक निर्देशिका पथ है जहाँ स्रोत पूर्ण फ़ाइल पथ है।

import ftplib
import os

def uploadFileFTP(sourceFilePath, destinationDirectory, server, username, password):
    myFTP = ftplib.FTP(server, username, password)
    if destinationDirectory in [name for name, data in list(remote.mlsd())]:
        print "Destination Directory does not exist. Creating it first"
        myFTP.mkd(destinationDirectory)
    # Changing Working Directory
    myFTP.cwd(destinationDirectory)
    if os.path.isfile(sourceFilePath):
        fh = open(sourceFilePath, 'rb')
        myFTP.storbinary('STOR %s' % f, fh)
        fh.close()
    else:
        print "Source File does not exist"

में myFTP.storbinary('STOR %s' % f, fh)क्या है % f?
हृदयोज टी

@HrvojeT नहीं लगता कि% f की आवश्यकता है क्योंकि यह डिफ़ॉल्ट रूप में सेट है। विस्तार के लिए इस ftpguide.com/STRU.htm
देबाशीष मित्र

रिमोट क्या है?
साजिद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.