파이썬 실습/FTP(파일전송)프로그램 만들기

파이썬 FTP(파일전송) 프로그램 만들기 - 3. 다운로드 기능

파기차차 2022. 11. 17. 07:09
728x90
반응형
SMALL
728x90
ㅁ 개요

 

O 프로그램 소개
 

 

 - 이번 프로그램은 이전글(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)

)에서 더욱 자세히 보실 수 있습니다.)

 

 

 

 

O 완성된 프로그램 실행 화면
 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

(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. 기본기능)의 내용을 완료하셔야 정상적인 수행이 가능합니다.

 

반드시 그런 것은 아니지만, 가급적 이전글을 학습하시길 추천 드립니다.

 

 


 

ㅁ 세부 내용
 
O 완성된 소스

 

소스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()

 

 

 

 

 

O 소스 다운로드 및 실행
 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행하시기 바랍니다.
 > python 2.download_1.basic.py
 
 
 > python 2.download_2.path.py
 
 
 > python 2.download_3.path_loop.py

 

 


 
 
O 소스 분석

 

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 위치로 받겠다.

 

 


 

O 주요 내용

 

 

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)' 와 같이 써 주어야 합니다.

 

 

 

 


 

ㅁ 정리
 
O 우리가 배운 내용
 
 - 오늘은 FTP서버 프로그램의 다운로드 기능을 만들어 세부적으로 나누어 살펴 보았습니다.
 
 
 - 오늘 우리가 배운 내용을 간단히 정리해 보면 아래와 같습니다.
 
 > 1. 기본 디렉토리에서 파일 1개 다운로드
 > 2. 서버와 내PC 경로를 변경 후 다운로드
 > 3. 지정된 내 PC 디렉토리에 서버의 특정 디렉토리의 모든 파일 다운로드 하기
 
 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

728x90
반응형
LIST