- 이번 프로그램은 이전글(2022.11.13 - [파이썬 실습/FTP(파일전송)프로그램 만들기] - 파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능)에 이은 3번째 글로 FTP서버에서 파일을 다운로드 하는 기능들을 설명합니다.
(본 블로그의 내용은 유튜브 동영상(
파이썬 FTP(파일전송) 프로그램 만들기-3.다운로드편(FTP program by Python-3.Download-1.one file)
파이썬 FTP(파일전송) 프로그램 만들기-3.다운로드편(FTP program by Python-3.Download-2.Directory)
파이썬 FTP(파일전송) 프로그램 만들기-3.다운로드편 (FTP program by Python-3.Download-3.atOnce)
)에서 더욱 자세히 보실 수 있습니다.)
(1) 서버쪽 디렉토리에서 파일 2개(aa.txt, bb.txt)를 내 PC로 다운로드 받을 예정입니다.
(2) 내 PC의 다운로드 폴더에는 현재 아무것도 없습니다.
(3) 다운로드 프로그램을 실행 시키면 서버에 연결(id, pw, port) 후 해당 디렉토리의 파일 2개를 다운로드 합니다.
(4) 내PC에서 확인 결과 정상적으로 파일 2개(aa.txt, bb.txt)가 받아진것을 확인할 수 있습니다.
O 사전 준비 사항
- 이번 게시글의 내용은 이전글(2022.11.13 - [파이썬 실습/FTP(파일전송)프로그램 만들기] - 파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능)의 내용을 완료하셔야 정상적인 수행이 가능합니다.
반드시 그런 것은 아니지만, 가급적 이전글을 학습하시길 추천 드립니다.
소스1 : 기본 디렉토리에서 파일 1개 다운로드
####################################################################
# ftp 연결, 로그인, 포트변경, 로깅, 디렉토리 목록, 파일목록을 보여줌
# 기본 디렉토리에서 파일 1개 다운로드
#
####################################################################
import ftplib
import os
HOST = "192.168.244.112"
PORT = 2221
ID = 'admin' # ftp 서버의 본인 ID
PW = 'admin1234' # ftp 서버의 본인 패스워드
# create a new FTP() instance
f = ftplib.FTP()
f.set_debuglevel(1) # 로깅
# connect to our FTP site
f.connect(HOST,PORT)
# log into the FTP site
f.login(ID, PW)
entries = f.nlst() # 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)
# FTP 서버의 data.txt 파일을 로컬 PC의 data.txt 파일로 다운로드한다.
with open('data.txt', 'w') as save_f:
f.retrlines("RETR data.txt", save_f.write)
f.quit()
소스2 : 서버와 내PC 경로를 변경 후 다운로드
####################################################################
# 서버 디렉토리 지정/변경
# 로컬 PC 다운로드 경로 지정
#
####################################################################
import ftplib
import os
HOST = "192.168.244.112"
PORT = 2221
ID = 'admin' # ftp 서버의 본인 ID
PW = 'admin1234' # ftp 서버의 본인 패스워드
# create a new FTP() instance
f = ftplib.FTP()
f.set_debuglevel(1)
# connect to our FTP site
f.connect(HOST,PORT)
# log into the FTP site
f.login(ID, PW)
entries = f.nlst() # 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)
f.cwd('/Download/KakaoTalk') # 받고자 하는 파일의 서버측 경로로 이동
# 로컬 PC의 저장 경로
localpath = "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/"
# 서버의 파일을 "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/" 아래에 받겠다라는 의미
local_filename = os.path.join(localpath, 'aa.txt')
with open(local_filename, 'wb') as save_f:
f.retrbinary("RETR aa.txt", save_f.write)
f.quit()
소스3 : 지정된 내 PC 디렉토리에 서버의 특정 디렉토리의 모든 파일 다운로드 하기
####################################################################
# 서버 디렉토리 지정 후 지정된 디렉토리 내 모든 파일을
# 로컬 PC에 지정된 다운로드 경로로 가져오기
#
####################################################################
import ftplib
import os
HOST = "192.168.244.112"
PORT = 2221
ID = 'admin' # ftp 서버의 본인 ID
PW = 'admin1234' # ftp 서버의 본인 패스워드
# create a new FTP() instance
f = ftplib.FTP()
f.set_debuglevel(1)
# connect to our FTP site
f.connect(HOST,PORT)
# log into the FTP site
f.login(ID, PW)
f.cwd('/Download/Telegram') # 받고자 하는 파일의 서버측 경로로 이동
entries = f.nlst() # 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)
# 로컬 PC의 저장 경로
localpath = "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/"
for filename in entries:
# 서버의 파일을 "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/" 아래에 받겠다는 의미임
local_filename = os.path.join(localpath, filename)
with open(local_filename, 'wb') as save_f:
f.retrbinary("RETR "+filename, save_f.write)
save_f.close
f.quit()
> python 2.download_1.basic.py
> python 2.download_2.path.py
> python 2.download_3.path_loop.py
1.f.set_debuglevel(1) <-- 로깅을 기능을 활성화
2.with open('aa.txt', 'w') as save_f: <-- 파일을 쓰기 모드로 열어서
3.f.retrlines("RETR aa.txt", save_f.write) <--aa.txt파일에 저장(텍스트 파일은 retrlines()함수 사용)
4.f.cwd('/Download/KakaoTalk') <-- 받고자 하는 파일의 서버측 경로로 이동
5.local_filename = os.path.join(localpath, 'aa.txt') <-- 서버의 파일을 내PC의 특정한 장소(localpath)로 지정 후 다운로드
6.with open(local_filename, 'wb') as save_f: <-- 파일을 'wb' 모드로 열어서
7.f.retrbinary("RETR aa.txt", save_f.write) <--aa.txt파일에 저장(바이너리 파일은 retrbinary()함수 사용)
f.login(ID, PW)
8.f.cwd('/Download/Telegram') <-- for 루프를 돌릴때는 f.login(ID,PW) 코드 아래에 이 코드를 위치시켜야함
9.for filename in entries: <-- 지정한 디렉토리내 모든 파일을 다운로드
10.local_filename = os.path.join(localpath, filename) <-- 내PC 위치로 받겠다.
1.FTP로 텍스트 파일 다운로드 시 아래와 같이 파일 오픈시 'w' 인자를 사용해야 하고, retrlines()함수를 사용합니다.
2.다운로드 받는 파일이 바이너리 타입인 경우 파일 오픈시 'wb' 인자를 사용해야 하고, retrbinary()함수를 사용합니다.
아래에서는 서버측의 받고자 하는 경로(f.cwd('/Download/KakaoTalk')로 이동 후 내가 원하는 저장위치를 지정(D:/~~~~~~~~~~/download/)하여 다운로드 받고 있습니다.
3.서버측의 특정 디렉토리 내 모든 파일을 다운로드 받기 위해서 아래와 같이 f.cwd('/Download/Telegram') 디렉토리로 이동 후 해당 디렉토리의 파일 목록(entries = f.nlst())을 for루프를 돌려 모두 다운로드 하고 있습니다.
for 루프를 돌릴때 로컬 디렉토리를 지정하기 위해서는 'local_filename = os.path.join(localpath, filename)' 와 같이 써 주어야 합니다.
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > FTP(파일전송)프로그램 만들기' 카테고리의 다른 글
파이썬 FTP(파일전송) 프로그램 만들기 - 4. 업로드 기능 (0) | 2022.11.18 |
---|---|
파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능 (0) | 2022.11.15 |
파이썬 FTP(파일전송) 프로그램 만들기 - 1.소개편 (0) | 2022.11.14 |