반응형
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()
handle = open(path.rstrip("/") + "/" + filename.lstrip("/"), 'wb')
ftp.retrbinary('RETR %s' % filename, handle.write)
A = filename
ftp = ftplib.FTP("IP")
ftp.login("USR Name", "Pass")
ftp.cwd("/Dir")
try:
ftp.retrbinary("RETR " + filename ,open(A, 'wb').write)
except:
print "Error"
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)
물론 가능한 오류를 처리하는 것이 현명 할 것입니다.
ftplib
Python 표준 라이브러리 의 모듈은 어셈블러와 비교할 수 있습니다. https://pypi.python.org/pypi/ftputil 과 같은 고급 라이브러리를 사용하십시오.
이것은 나를 위해 잘 작동하는 Python 코드입니다. 댓글은 스페인어로되어 있지만 앱은 이해하기 쉽습니다.
# 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
FTP에서 로컬로 다운로드하는 경우 다음을 사용해야합니다.
with open( filename, 'wb' ) as file :
ftp.retrbinary('RETR %s' % filename, file.write)
그렇지 않으면 스크립트가 FTP가 아닌 로컬 파일 저장소에 있습니다.
스스로 실수를하면서 몇 시간을 보내십시오.
아래 스크립트 :
import ftplib
# Open the FTP connection
ftp = ftplib.FTP()
ftp.cwd('/where/files-are/located')
filenames = ftp.nlst()
for filename in filenames:
with open( filename, 'wb' ) as file :
ftp.retrbinary('RETR %s' % filename, file.write)
file.close()
ftp.quit()
참고URL : https://stackoverflow.com/questions/11573817/how-to-download-a-file-via-ftp-with-python-ftplib
반응형
'developer tip' 카테고리의 다른 글
ggplot2에서 로그 색상 스케일을 수행하는 기본 제공 방법이 있습니까? (0) | 2020.12.11 |
---|---|
FXML 컨트롤러 클래스에 액세스 (0) | 2020.12.11 |
Autofac-InstancePerHttpRequest 대 InstancePerLifetimeScope (0) | 2020.12.11 |
BibTex를 사용하는 경우 IEEE 종이에서 열을 수동으로 균일화하는 방법은 무엇입니까? (0) | 2020.12.10 |
BibTex를 사용하는 경우 IEEE 종이에서 열을 수동으로 균일화하는 방법은 무엇입니까? (0) | 2020.12.10 |