원본 : http://primrose.tistory.com/37

파이썬으로 FTP서버에 접속하여 여러 작업을 할 때에는 ftplib를 쓰면 편하다.


일단 ftplib을 import 한다


import
ftplib


그 다음엔 FTP서버에 접속을 해야한다. ftplib에서 FTP서버에 접속하게 해 주는 클래스는 FTP클래스로
class ftplib.FTP([host[user[passwd[acct[timeout]]]]])

위와같이 정의되어 있다.

이 중에서 우리가 필요로 하는 것만 설명을 하자면.


host : FTP서버의 IP주소나, 도메인 네임.

user : FTP서버 아이디. 익명으로 접속하려먼 'anonymous' 입력 후 비밀번호를 입력하지 않는다.

passwd : FTP서버의 비밀번호.



이제 위 사항을 기입해서 FTP서버에 접속한다.


import
ftplib

FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')


무엇인가 잘못 쓴 것이 아니라면 정상적으로 접속이 될 것이다.

접속 된 후에는 ftplib의 함수들을 이용하여 FTP 클라이언트로써의 작업을 수행 할 수 있다.
기본적인 함수들을 소개하자면.

FTP이름.pwd()
: 현재 디렉토리를 보여준다.
FTP이름.cwd(pathname)
: 현재 디렉토리를 바꾼다.

FTP이름.mkd(pathname)
: 현재 디렉토리에 폴더를 만든다.

FTP이름.rmd(pathname)
: 현재 디렉토리의 폴더를 지운다.

FTP이름.size(filename)
: 파일의 크기를 알려준다.
FTP이름.nlst(argument[...])
: FTP서버에서 파일 목록을 가져온다. argument에 아무것도 넣지 않을 경우, 현재 폴더의 파일목록을 가져온다.

FTP이름.retrbinary(commandcallback[maxblocksize[rest]]) 

: FTP서버에서 바이너리모드로 파일을 가져온다.

FTP이름.retrlines(command[callback])

: FTP서버에서 ASCII모드로 파일을 가져온다.

FTP이름.storbinary(commandfile[blocksizecallbackrest])
: FTP서버에 바이너리모드로 파일을 전송한다.
FTP이름.storlines(commandfile[callback])
: FTP서버에 ASCII모드로 파일을 전송한다.
FTP이름.quit()
: FTP서버와의 접속을 끊는다. 에러 발생시엔 FTP이름.close()를 쓴다.



이제 기본적인 함수들을 알았으니 FTP서버에 파일을 전송하는 방법에 대해 설명하겠다.


파일 전송에는 2가지 모드가 있다. 바이너리 모드와 ASCII모드다.


바이너리 모드는 사람이 읽을 수 있는 텍스트 형식의 파일을 제외한 파일들을 전송할 때 쓰고, ASCII모드는 사람이 읽을 수 있는 파일을 전송할 때 쓴다.


일단 바이너리 모드로 파일을 전송해보자. 바이너리 모드로 파일을 전송할 때에는 storbinary 함수에 'STOR' 명령어와 'rb' 모드로 열은 파일 핸들러를 매개변수로 넣어줘야 한다.


import ftplib
FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')

FTP이름.storbinary( 'STOR' , open('파일이름','rb') )
#'파일이름'은 자기가 전송하려는 파일의 이름

위와같이 하면 FTP서버 내의 현재 디렉토리에 파일이 전송된다.

ASCII모드로 파일을 전송하는 것도 위와 비슷하다. 단지 파일을 여는 방법을 달리해야한다.

import ftplib

FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')

FTP이름.storlines( 'STOR' , open('파일이름','r') )
#'파일이름'은 자기가 전송하려는 파일의 이름

파일 핸들러를 'r' 모드로 열어서 storlines 함수에 넘겨주면 ASCII모드로 파일이 전송된다.


반응형

+ Recent posts