복붙노트

[PYTHON] Python ftplib로 FTP를 통해 파일을 다운로드하는 방법

PYTHON

Python ftplib로 FTP를 통해 파일을 다운로드하는 방법

FTP 서버에 쉽게 연결하고 zip 파일을 여는 다음 코드를 가지고 있습니다. 해당 파일을 로컬 시스템에 다운로드하고 싶습니다. 그렇게하는 방법?

# Open the file for writing in binary mode
print 'Opening local file ' + filename
file = open(filename, 'wb')

# Download the file a chunk at a time
# Each chunk is sent to handleDownload
# We append the chunk to the file and then print a '.' for progress
# RETR is an FTP command

print 'Getting ' + filename
ftp.retrbinary('RETR ' + filename, handleDownload)

# Clean up time
print 'Closing file ' + filename
file.close()

해결법

  1. ==============================

    1.

    ftp.retrbinary('RETR %s' % filename, file.write)
    
  2. ==============================

    2.

    A = filename
    
    ftp = ftplib.FTP("IP")
    ftp.login("USR Name", "Pass")
    ftp.cwd("/Dir")
    
    
    try:
        ftp.retrbinary("RETR " + filename ,open(i, 'wb').write)
    except:
        print "Error"
    
  3. ==============================

    3.

    FILENAME = 'StarWars.avi'    
    
    with ftplib.FTP(FTP_IP, FTP_LOGIN, FTP_PASSWD) as ftp:
        ftp.cwd('movies')
        with open(FILENAME, 'wb') as f:
            ftp.retrbinary('RETR ' + FILENAME, f.write)
    

    물론 가능한 오류를 처리하는 것이 현명합니다.

  4. ==============================

    4.파이썬 표준 라이브러리의 ftplib 모듈은 어셈블러와 비교 될 수 있습니다. 다음과 같은 고수준 라이브러리를 사용하십시오 : https://pypi.python.org/pypi/ftputil

    파이썬 표준 라이브러리의 ftplib 모듈은 어셈블러와 비교 될 수 있습니다. 다음과 같은 고수준 라이브러리를 사용하십시오 : https://pypi.python.org/pypi/ftputil

  5. ==============================

    5.이것은 나를 위해 잘 작동하는 파이썬 코드입니다. 댓글은 스페인어로되어 있지만 앱은 이해하기 쉽습니다.

    이것은 나를 위해 잘 작동하는 파이썬 코드입니다. 댓글은 스페인어로되어 있지만 앱은 이해하기 쉽습니다.

    # coding=utf-8
    
    from ftplib import FTP                                                                      # Importamos la libreria ftplib desde FTP
    
    import sys
    
    def imprimirMensaje():                                                                      # Definimos la funcion para Imprimir el mensaje de bienvenida
        print "------------------------------------------------------"
        print "--               COMMAND LINE EXAMPLE               --"
        print "------------------------------------------------------"
        print ""
        print ">>>             Cliente FTP  en Python                "
        print ""
        print ">>> python <appname>.py <host> <port> <user> <pass>   "
        print "------------------------------------------------------"
    
    def f(s):                                                                                   # Funcion para imprimir por pantalla los datos 
        print s
    
    def download(j):                                                                            # Funcion para descargarnos el fichero que indiquemos según numero    
        print "Descargando=>",files[j]      
        fhandle = open(files[j], 'wb')
        ftp.retrbinary('RETR ' + files[j], fhandle.write)                                       # Imprimimos por pantalla lo que estamos descargando        #fhandle.close()
        fhandle.close()                                                     
    
    ip          = sys.argv[1]                                                                   # Recogemos la IP       desde la linea de comandos sys.argv[1] 
    puerto      = sys.argv[2]                                                                   # Recogemos el PUERTO   desde la linea de comandos sys.argv[2]
    usuario     = sys.argv[3]                                                                   # Recogemos el USUARIO  desde la linea de comandos sys.argv[3]
    password    = sys.argv[4]                                                                   # Recogemos el PASSWORD desde la linea de comandos sys.argv[4]
    
    
    ftp = FTP(ip)                                                                               # Creamos un objeto realizando una instancia de FTP pasandole la IP
    ftp.login(usuario,password)                                                                 # Asignamos al objeto ftp el usuario y la contraseña
    
    files = ftp.nlst()                                                                          # Ponemos en una lista los directorios obtenidos del FTP
    
    for i,v in enumerate(files,1):                                                              # Imprimimos por pantalla el listado de directorios enumerados
        print i,"->",v
    
    print ""
    i = int(raw_input("Pon un Nº para descargar el archivo or pulsa 0 para descargarlos\n"))    # Introducimos algun numero para descargar el fichero que queramos. Lo convertimos en integer
    
    if i==0:                                                                                    # Si elegimos el valor 0 nos decargamos todos los ficheros del directorio                                                                               
        for j in range(len(files)):                                                             # Hacemos un for para la lista files y
            download(j)                                                                         # llamamos a la funcion download para descargar los ficheros
    if i>0 and i<=len(files):                                                                   # Si elegimos unicamente un numero para descargarnos el elemento nos lo descargamos. Comprobamos que sea mayor de 0 y menor que la longitud de files 
        download(i-1)                                                                           # Nos descargamos i-1 por el tema que que los arrays empiezan por 0 
    
  6. from https://stackoverflow.com/questions/11573817/how-to-download-a-file-via-ftp-with-python-ftplib by cc-by-sa and MIT license