quetzal
12
2020-04-04 19:02:39 작성 2020-04-04 22:31:30 수정됨
2
127

python에서 ftp를 연결하여 업데이트 된 파일만 다운받고 싶습니다.


from ftplib import FTP
import sys
import ftplib
import os
import fnmatch
os.chdir(r'./data'# Directory where the files need to be downloaded
ftp=ftplib.FTP('ip''id''password'# ftp host info
ftp.cwd('./')
filematch='*.txt'

import time

downloaded = []

while True:  # runs forever
    skipped = 0

    for filename in ftp.nlst(filematch):
        if filename not in downloaded:
            fhandle=open(filename, 'wb')
            print('Getting ' + filename)
            ftp.retrbinary('RETR '+ filename, fhandle.write)
            fhandle.close()
            downloaded.append(filename)
        else:
            skipped += 1

    print('Downloaded %s, skipped %d files' % (downloaded[-1], skipped))
    time.sleep(300)  # sleep 5 mins after finishing last download

ftp.quit()


현재 코드는 기존에 다운받은 파일들을 리스트에 저장하고,

sleep함수를 써서 1분에 한번씩 확인을 하는 방법을 썼습니다.

하지만 하루에 쌓이는 파일양이 7~8만개 정도 될 것같습니다.

이렇게 되면 리스트가 너무 커져서 문제가 생길 것 같습니다.

어떤 방법을 써야 새로운 파일들만 계속 업데이트하여 받아올 수 있을까요?

파일명은 YYYYMMDD_HHMMSS.txt 형식이고 데이터가 5분에 한번씩 쌓이게 될 것 같습니다.

ftplib docu : https://docs.python.org/3/library/ftplib.html

0
0
  • 답변 2

  • kaminari
    285
    2020-04-05 00:48:21 작성 2020-04-05 00:49:22 수정됨

    지금까지 받은 모든 파일을 list 에 저장하기 부담스럽다는 말씀이신가요?

    파일명이 datetime 으로 파싱하기 쉽게 되어있으니 그걸 이용하시면 어떨까요? 아니면 정규표현식을 사용하신다거나.. 

    0
  • quetzal
    12
    2020-04-05 13:26:45

    적어도 한달이상 ftp를 유지해야 하는데, 하루에 쌓이는 양이 7~8만개라서, 한달이면 20만개가 넘을 것 같습니다.

    그러면 시간이 지나면 리스트를 읽는데 시간이 많이 걸리지 않을까요?

    제가 이렇게 많은 양의 데이터를 처리해 본 적이 없어서 어떻게 처리해야 할지를 모르겠습니다...ㅠㅠ

    혹시 datetime으로 파싱하는 부분이나 정규표현식으로 최근의 데이터만을 받는 러프한 코드를 적어주실 수 있으실까요...?

    코딩 실력이 좋지 못해서 감이 잡히질 않습니다...ㅠㅠ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.