2009-06-10 1 views
1

그래서 나는이 페이지의 문서를 따랐습니다 바이너리 파일을 검색하고 거기에서 열어서 그 파일에 쓸 수 있습니다. 여기

내가 이해하지 못하는 것을

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write)  

내가 TEMP.TXT에 쓰는 싶습니다는 ... 나에게 문제를주고 라인, 그래서 내가

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write('some new txt'))  
을 시도하고 있었다

하지만 오류가 발생했습니다. FTP 연결을 만들 수 있고, pwd(), cwd(), rename() 등을 할 수 있습니다.

ps Google에 가능한 한 많이 시도하고 있습니다. 감사합니다.

+0

"바이너리 파일을 검색하고 그곳에서 열어서 그 파일에 쓸 수 있습니다"매우 명확하지 않습니다. 당신이하고 싶은 일에 대한 단계별 목록으로 이것을 확장 할 수 있습니까? 의견을 통해, 당신이하고 싶은 일과 ftplib로 어떤 문제가 있는지 완벽하게 불분명합니다. –

답변

2

서버에서 파일을 다운로드하려는 경우 원래 코드가 작동 했어야합니다 (). retrbinary 명령은 지정한 함수 객체 (즉, 함수 이름 뒤에 ()이없는 함수 이름)를 허용합니다. 데이터 (바이너리 파일)가 도착할 때마다 호출됩니다. 이 경우 에 파일 write 메서드가 호출됩니다. retrlines과 약간 다릅니다. retrlines은 데이터가 텍스트 파일이라고 가정하고 개행 문자를 적절하게 변환하지만 이미지는 손상됩니다.

추가 정보를 읽으면 서버의 파일에 쓰려고하는 것처럼 보입니다.

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb")) 
+0

예 서버에있는 파일에 쓰려고하는데, 지금은 잘못된 방법 일 수 있습니다 ... 오히려 파일을 로컬로 작성한 다음 보내거나 업로드해야합니다. 작성/작성,이 방법은 연결 시간을 minizie해야합니다. – SkyLar

+0

이것은 서버의 파일에 쓰는 가장 쉬운 방법입니다. 처음에는 서버에서 파일을 다운로드하려고한다고 생각했습니다. 첫 번째 블록에있는 코드가 실제로 무엇을하는지 명확히하기 위해 대답을 업데이트했습니다. –

0

ftp.retrbinary이 같은 두 번째 인수를 취이 경우, 당신은 저장 기능에 의해 호출하는 파일 객체 (또는 파일처럼 동작 read 방법으로 다른 객체)를 통과해야합니다 콜백 함수 직접적. 파일 객체 ieopen ('TEMP.TXT', 'WB')의 방법을 쓰기 쓰기 대신 당신은 쓰기를 직접 호출 할 수

당신은 당신의 자신의 콜백을 공급하고 당신이 원하는 무엇이든 할 수 있습니다 데이터와 관련이있다.

def mywriter(data): 
    print data 
ftp.retrbinary('RETR temp.txt', mywriter)