2009-08-27 4 views
1

파이썬에는 StringIO 스트림이 있지만 파이썬에는 파일 스트림과 같은 것이 있나요? 또한 이러한 것들을 찾는 더 좋은 방법이 있습니까? 문서 등 ...파이썬에서 FileIO가 있습니까?

"작성자"개체에 "스트림"을 전달하려고합니다. 이 writer 객체에 파일 핸들/스트림을 전달할 수 있기를 바랬습니다.

+2

http://www.python.org/doc/에 액세스 할 수 있습니까? 그것이 사물을 보는 유일한 방법입니다. 당신이 지금 사물을 보려고 무엇을 사용하고 있습니까? –

답변

5

거의 동일한 방식으로 작동하는 내장 파일()이 있습니다. 다음은 문서입니다 : http://docs.python.org/library/functions.html#filehttp://python.org/doc/2.5.2/lib/bltin-file-objects.html.

이 파일의 모든 라인을 인쇄하려면

가 할 : 물론

for line in file('yourfile.txt'): 
    print line 

는 .close() .read(), .readlines() .seek(), 같은 더있다 , ... 기본적으로 StringIO와 동일한 프로토콜입니다.

편집 : 당신은 개방 사용해야합니다() 대신 같은 API를 가지고 파일(),의 - 파일() 나는 당신이 열려 찾고 있습니다 추측하고

+0

파일 개체는 http://docs.python.org/library/stdtypes.html#bltin-file-objects에 문서화되어 있습니다. – tsg

1

, 모든 I/O 조작은 hight 레벨 API로 랩핑됩니다. 파일은 오브젝트를 좋아합니다.

즉, 파일을 좋아하는 모든 파일은 동일하게 동작하며 예상 한 기능에서 사용할 수 있습니다.

  • 열기/닫기/IO 예외
  • 반복
  • 버퍼링
  • 읽기/쓰기/
을 찾는이가 오리를 입력이라고하며, 다음과 같은 동작을 기대할 수있는 개체와 같은 파일에 대한

StringIO, File 및 개체와 같은 모든 파일을 실제로 서로 바꿀 수 있으므로 직접 I/O 관리를 신경 쓸 필요가 없습니다.

약간의 데모로

,의 당신은 표준 출력으로 무엇을 할 수 있는지 보자, 객체와 같은 파일 표준 출력 :

import sys 
# replace the standar ouput by a real opened file 
sys.stdout = open("out.txt", "w") 
# printing won't print anything, it will write in the file 
print "test" 

객체 같은 모든 파일이 동일하게 동작하고, 당신이 그들을 사용해야은 같은 방법 :

import urllib 
# urllib doesn't use "open" and doesn't raises only IOError exceptions 
stream = urllib.urlopen("www.google.com") 

# but this is a file like object and you can rely on that : 
for line in steam : 
    print line 
0 :

# try to open it 
# do not bother with checking wheter stream is available or not 

try : 
    stream = open("file.txt", "w") 
except IOError : 
    # if it doesn't work, too bad ! 
    # this error is the same for stringIO, file, etc 
    # use it and your code get hightly flexible ! 
    pass 
else : 
    stream.write("yeah !") 
    stream.close() 

# in python 3, you'd do the same using context : 

with open("file2.txt", "w") as stream : 
    stream.write("yeah !") 

# the rest is taken care automatically 

객체 방법과 같은 파일이 공통의 행동을 공유하는 참고하지만, 객체와 같은 파일을 만들 수있는 방법은 표준 아닙니다

마지막 행동은 기본 동작이 동일한 것과 동일한 방식으로 작동하기 때문이 아닙니다. 당신이 일하는 것을 이해하는 것이 중요합니다. 마지막 예제에서 "for"루프를 인터넷 리소스에 사용하는 것은 매우 위험합니다. 실제로, 여러분은 무한한 데이터 흐름으로 끝나지 않을 것이라는 것을 알고 있습니다.사용이 경우

:

print steam.read(10000) # another file like object method 

는 안전합니다. Hight 추상화는 강력하지만, 어떻게 작동 하는지를 알 필요가 없습니다.

관련 문제