원본 : 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(command, callback[, maxblocksize[, rest]])
: FTP서버에서 바이너리모드로 파일을 가져온다.
FTP이름.retrlines(command[, callback])
: FTP서버에서 ASCII모드로 파일을 가져온다.
- FTP이름.storbinary(command, file[, blocksize, callback, rest])
- : FTP서버에 바이너리모드로 파일을 전송한다.
- FTP이름.storlines(command, file[, 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모드로 파일이 전송된다.
'Python' 카테고리의 다른 글
[Python Script] Maria DB Table Sync 맞추기 (0) | 2017.02.13 |
---|---|
[Python] libmysqlclient.so.10 Error (2) | 2016.11.02 |
[Python] os.system / SCP 전송 (ssh 비밀번호 없이) (0) | 2016.10.25 |
[펌][Python] OS 관련 명령어 (0) | 2016.10.21 |
[펌] [python] pass, continue 차이 (0) | 2016.03.08 |