2014-09-09 3 views
6
에 파일을 생성 쓰기

나는 임시 파일을 디스크에 같은 뭔가를 저장하지 않고 파이썬에서 내 FTP 사이트에 직접 텍스트를 작성하기 위해 찾고 있어요? 대단히 감사합니다. the docs으로파이썬 직접 FTP

답변

8

말 :

스토어 바이너리 전송 모드에서 파일을. cmd은 적절한 STOR 명령이어야합니다 : "STOR filename". 파일이 ... 그래서

크기 저장되는 데이터를 제공하는 블록 크기의 블록의 read() 방법을 사용하여 EOF 때까지 읽을 수있는 파일 객체 (바이너리 모드로 열립니다)입니다, 당신은 그것을 줄 필요 적절한 read 메소드를 가진 파일과 유사한 객체.

문자열은 파일 형 개체가 아니지만 io.BytesIO입니다. 그래서 :

또한
import io 
bio = io.BytesIO(b'text to store') 
ftp.storbinary('STOR myfile.html', bio) 

, 나는 그 'rb' 인수를 통과하지 못한 사항. storbinary의 세 번째 매개 변수는 블록 크기이며, 'rb'은 분명히 유효한 블록 크기가 아닙니다.


파이썬 2.5 이하에서 작업해야하는 경우 Dan Lenski의 답변을 참조하십시오.

파이썬 2.6-2.7로 작업해야하고 파일과 유사한 객체의 성능이 중요합니다 (여기에는 없지만 어떤 경우가있을 수 있습니다). CPython 만 신경 써야합니다 그의 대답을 사용하지만 cStringIOStringIO 대신 사용하십시오. (일반 StringIO은 2.x에서 느리고 io.BytesIO은 약 3.3보다 훨씬 느립니다.)

+0

나를 위해 일했지만 BytesIO 바이트와 비슷한 개체로 문자열을 인코딩해야했습니다. 그래서 :'bi = io.BytesIO ('text to store'.encode ('utf-8'))' – iomihai

+1

@iomihai 글쎄,이 경우에는 str 리터럴과 인코딩 대신 바이트 리터럴을 사용할 수 있습니다. 그것. 하지만 그래, 나는 대답을 편집 할게. – abarnert

5

StringIO object을 사용하려고 했습니까?

from ftplib import * 
import StringIO 

ftp = FTP('ftp.mysite.com') 
ftp.login('un','pw') 
ftp.cwd('/') 
ftp.storbinary('STOR myfile.html', StringIO.StringIO('text to store')) 

편집 : @abarnert's answer는 Python3에 해당합니다. 내 것은 Python2 버전이다.

+1

'io'는 3.x에서와 마찬가지로 2.6과 2.7에서 잘 작동합니다. 따라서 2.5 호환성이 필요하지 않으면 이전 버전을 사용할 이유가 없습니다. – abarnert

+0

좋은 지적! ('# its_still_2007_where_I_am') –

+0

글쎄, 필자는 2.4가 생존 할 수없는 기능을 추가 할 때까지 1.5 호환성을 유지했다. 그래서 이해할 수있다. – abarnert

관련 문제