FTP를 통한 Python 스크립트 업로드 파일


86

FTP에 파일을 업로드하는 스크립트를 만들고 싶습니다.

로그인 시스템은 어떻게 작동합니까? 나는 다음과 같은 것을 찾고 있습니다.

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_TLSFTP 호스트에 TLS가 필요한 경우 대신 사용하십시오 .


검색하려면 다음을 사용할 수 있습니다 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

이상한 동작이 있습니다. 명령 줄에서 내 서버로 ftp를 수행하고 파일을 업로드 할 수 있지만 ftplib를 사용하지 않고 연결이 잠시 열린 다음 소켓 오류가 발생합니다. 이유가 무엇일까요?
89n3ur0n

안녕, 나는 그것이 폴더 사용 FTPLIB 업로드 할 수 있는지 알고 싶다
vishruti

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
수락 된 답변을 사용하여 Windows에서 FTP 서버로 파일을 업로드하는 데 문제가있는 사람이 있다면이 방법이 저에게 효과적이었습니다.
mKane848

나는 이것을 사용하여 원격 FTP 서버에서 바이너리 파일을 덮어 쓰기 / 업데이트하는데 문제가 있었지만 ftp.storlines를 통해 텍스트 파일과 잘 작동합니다 ...
Edward

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
질문은 SFTP가 아닌 FTP를 통해 파일을 전송하는 것입니다.
Sam Hosseini

동의 SSHException: Error reading SSH protocol banner" when using ProxyCommand합니다. ftp에서이 경로를 사용할 때 종종 오류가 발생합니다.
Benloper

0

난 그냥 비슷한 질문에 대답 여기 FTP 서버 패브릭하시기 바랍니다 우리 패브릭과 통신 할 수있는 경우, 이럴. 날것보다 훨씬 낫습니다 ftp.

의 FTP 계정이 dotgeek.com있으므로 다른 FTP 계정에서도 작동하는지 확실하지 않습니다.

#!/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
fabrics 문서에서 누락되지 않는 한 fabric은 FTP를 지원하지 않습니다. dotgeek.com이 동일한 자격 증명을 사용하여 SSH와 FTP를 모두 지원하는 운이 좋은 상황에있을 것입니다.
Epcylon 2014-06-12

@Epcylon Fabric은 SFTP를 지원합니다- While the SFTP protocol (which put uses) 링크
Alex L

2
@AlexL 맞지만 SFTP는 어떤 식 으로든 FTP와 동일하지 않습니다. 동일한 목적을위한 두 가지 프로토콜이지만 FTP 서버에 연결해야하는 경우 SFTP 클라이언트를 사용할 수 없으며 그 반대도 마찬가지입니다. 위키 백과에서 : "SFTP는 SSH를 통해 실행되는 FTP가 아니라 IETF SECSH 워킹 그룹이 처음부터 설계 한 새로운 프로토콜입니다. "
Epcylon 2014

@Epcylon 응! Fabric이 무엇을 사용하는지 명확히하려고합니다. OP (또는 미래의 독자)가 FTP를 사용하는 대신 서버에 SFTP를 사용할 수 있기를 바랍니다. fabric은 매우 편리합니다.
Alex L

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?
Hrvoje T

@HrvojeT 기본값으로 설정되어 있으므로 % f가 필요하다고 생각하지 마십시오. 자세한 내용은이 ftpguide.com/STRU.htm을
Mitra

원격이란 무엇입니까?
사지 드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.