복붙노트

[PYTHON] 파이썬을 사용하지 않고 FTP 파일을 읽을 수 있습니까?

PYTHON

파이썬을 사용하지 않고 FTP 파일을 읽을 수 있습니까?

파이썬의 ftplib을 쓰지 않고 파일을 읽으려고합니다. 대략 다음과 같은 것 :

def get_page(url):
    try:
        return urllib.urlopen(url).read()
    except:
        return ""

하지만 FTP를 사용합니다.

나는 시도했다 :

def get_page(path):
    try:
        ftp = FTP('ftp.site.com', 'anonymous', 'passwd')
        return ftp.retrbinary('RETR '+path, open('page').read())
    except:
        return ''

그러나 이것은 효과가 없습니다. 문서의 유일한 예는 ftp.retrbinary ( 'RETR README', open ( 'README', 'wb'). write) 형식을 사용하여 파일을 쓰는 것입니다. 먼저 쓰지 않고도 ftp 파일을 읽을 수 있습니까?

해결법

  1. ==============================

    1.retrbinary 메서드는 ftp 연결에서 파일 내용을 검색 할 때마다 호출되는 함수에 대한 참조를 두 번째 매개 변수로 받아들입니다.

    retrbinary 메서드는 ftp 연결에서 파일 내용을 검색 할 때마다 호출되는 함수에 대한 참조를 두 번째 매개 변수로 받아들입니다.

    다음은 간단한 예입니다.

    #!/usr/bin/env python
    from ftplib import FTP
    
    def writeFunc(s):
      print "Read: " + s
    
    ftp = FTP('ftp.kernel.org') 
    ftp.login()
    ftp.retrbinary('RETR /pub/README_ABOUT_BZ2_FILES', writeFunc)
    

    writeFunc를 구현하여 호출 된 객체를 사용하는 내부 변수에 실제로 읽은 데이터를 추가하도록합니다.

    #!/usr/bin/env python
    from ftplib import FTP
    
    class Reader:
      def __init__(self):
        self.data = ""
      def __call__(self,s):
         self.data += s
    
    ftp = FTP('ftp.kernel.org') 
    ftp.login()
    r = Reader()
    ftp.retrbinary('RETR /pub/README_ABOUT_BZ2_FILES', r)
    
    print r.data
    

    업데이트 : Python 표준 라이브러리에 이런 종류의 모듈이 있다는 것을 깨달았습니다. StringIO :

    #!/usr/bin/env python
    from ftplib import FTP
    from StringIO import StringIO
    
    ftp = FTP('ftp.kernel.org') 
    ftp.login()
    r = StringIO()
    ftp.retrbinary('RETR /pub/README_ABOUT_BZ2_FILES', r.write)
    
    print r.getvalue()
    
  2. from https://stackoverflow.com/questions/11208957/is-it-possible-to-read-ftp-files-without-writing-them-using-python by cc-by-sa and MIT license