it-swarm.com.de

Python-Skript Hochladen von Dateien über FTP

Ich möchte ein Skript erstellen, um eine Datei auf FTP hochzuladen.

Wie würde das Login-System funktionieren? Ich suche so etwas:

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

Und jedes andere Zeichen in Anmeldeinformationen.

Verwenden Sie ftplib , Sie können es so schreiben:

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()

Verwenden Sie stattdessen ftplib.FTP_TLS, wenn der FTP-Host TLS erfordert.


Um es abzurufen, können Sie urllib.retrieve verwenden:

import urllib 

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

EDIT:

Um das aktuelle Verzeichnis herauszufinden, verwenden Sie FTP.pwd()

FTP.pwd (): Gibt den Pfadnamen des aktuellen Verzeichnisses auf dem Server zurück.

Um das Verzeichnis zu ändern, verwenden Sie FTP.cwd(pathname) :

FTP.cwd (Pfadname): Legen Sie das aktuelle Verzeichnis auf dem Server fest.

148
K Z

Sie werden höchstwahrscheinlich das Modul ftplib für Python verwenden möchten

 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"

Dadurch werden Sie bei einem FTP-Server angemeldet. Was Sie von dort aus tun, liegt bei Ihnen. Ihre Frage weist nicht auf andere Operationen hin, die wirklich ausgeführt werden müssen. 

5
Tadgh

Versuche dies:

#!/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()
3
Anand

Ich habe gerade eine ähnliche Frage hier Beantwortet. IMHO, falls Ihr FTP-Server mit Fabric kommunizieren kann, bitte Fabric. Es ist viel besser als rohe ftp.

Ich habe ein FTP-Konto von dotgeek.com, daher bin ich nicht sicher, ob dies für andere FTP-Konten funktioniert.

#!/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')

speichern Sie die Datei als fabfile.py und führen Sie fab copy lokal aus.

[email protected]:~$ 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.

Wenn Sie nicht immer ein Passwort eingeben möchten, fügen Sie einfach das Passwort hinzu

env.password = 'my_password'
1
CppLearner

ftplib now unterstützt Kontextmanager Ich denke, es kann noch einfacher gemacht werden

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)

Sie müssen weder die Datei noch die Sitzung schließen

1
gbonetti

Sie können die unten stehende Funktion verwenden. Ich habe es noch nicht getestet, aber es sollte funktionieren. Denken Sie daran, dass das Ziel ein Verzeichnispfad ist, in dem der Dateipfad als Quelle vollständig ist.

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"
0
Debasish Mitra