가상 파일 처리는 어떻게합니까?
그래서 파일을 만들기 위해 다음을 사용합니다.
fileHandle = open('fileName', 'w')
그런 다음 내용을 파일에 쓰고 파일을 닫습니다. 다음 단계에서는 파일을 처리합니다. 프로그램이 끝나면 삭제해야하는 "실제 파일"이 생깁니다.
"물리적"파일과 똑같이 동작하지만 (동일한 방식으로 조작 할 수 있도록 허용) Python에서 실행이 끝날 때 존재하지 않는 "가상"파일을 작성하는 방법이 있습니까?
tempfile.SpooledTemporaryFile
처음에는 임시 메모리 기반 가상 파일을 생성하지만 메모리에 보관 된 데이터가 지정된 데이터를 초과하는 경우 자동으로 물리적 디스크 기반 파일로 전환된다는 점에서 두 가지 장점을 모두 제공 하는 a 사용을 고려할 수 있습니다. 크기.
또 다른 좋은 기능은 (메모리를 사용할 때) 사용 중인 항목 에 따라 io.BytesIO
또는 자동으로 사용하여 유니 코드 문자열 또는 이진 데이터 (바이트)를 읽고 쓸 수 있다는 것입니다.io.StringIO
mode
유일한 까다로운 부분은 단계 사이에 파일을 닫는 것을 피해야한다는 사실 일 수 있습니다. 그렇게하면 메모리 나 디스크에서 파일이 삭제되기 때문입니다. 대신 파일 seek(0)
메서드 호출 을 사용하여 처음으로 되감기 만하면 됩니다.
파일 작업을 완료하고 닫을 때 파일의 데이터 양으로 인해 실제 파일로 롤오버되는 경우 디스크에서 자동으로 삭제됩니다.
당신이 StringIO
하고 BytesIO
에서 io
모듈.
StringIO
유니 코드 문자열 읽기 및 쓰기 (를 사용하여 파일을 여는 것과 동일)와 같이 텍스트 모드에서 열린 파일 처럼 작동 io.open(filename, mode, encoding='...')
하고, BytesIO
이진 모드 ( mode='[rw]b'
) 에서 열린 파일처럼 작동하며 쓰기 바이트를 읽을 수 있습니다.
파이썬 2 :
In [4]: f = io.BytesIO('test')
In [5]: type(f.read())
Out[5]: str
In [6]: f = io.StringIO(u'test')
In [7]: type(f.read())
Out[7]: unicode
파이썬 3 :
In [2]: f = io.BytesIO(b'test')
In [3]: type(f.read())
Out[3]: builtins.bytes
In [4]: f = io.StringIO('test')
In [5]: type(f.read())
Out[5]: builtins.str
공식 문서 에서 StringIO를 가상 파일로 사용할 수 있습니다.
import StringIO
output = StringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'
# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()
# Close object and discard memory buffer --
# .getvalue() will now raise an exception.
output.close()
이 StringIO
모듈은 읽기, 설명서를 제공 , 그것은 사용하기 쉬운해야합니다.
그러나 이것은 "파일의"내용을 메모리에 유지한다는 점을 명심하십시오. 데이터가 너무 많으면 실제 파일 (예 : / tmp)을 만들고 나중에 삭제하는 것이 좋습니다.
파일 대신 메모리에 쓰는 것을 의미하는 경우 단순히 텍스트를 버퍼에 쓰고 다음 함수를 사용할 수 있습니다.
def write(text):
global buffer
buffer += text + '\n' # Add a linefeed as you would if you were writing to a file
buffer = "" # Initialize the buffer
write("My name is Steve Grafton")
At the end, you will have a buffer that will be the same as if you had written your stuff to a file and then open the file and read all its contents to a buffer! Moreover, you can use the buffer during the process (before having finished your writing) and do searches in it, as if you had created a file for both reading and writing, only that in this case your pointer will
ReferenceURL : https://stackoverflow.com/questions/18550127/how-to-do-virtual-file-processing
'IT TIP' 카테고리의 다른 글
START_STICKY, START_NOT_STICKY 및 START_REDELIVER_INTENT 서비스 란? (0) | 2021.01.06 |
---|---|
Visual Studio 2012에서 사용자 지정 프로젝트를 디버깅하기 위해 기호 파일이로드되지 않음 (0) | 2021.01.06 |
SCSS / SASS : 쉼표로 구분하여 클래스 목록을 동적으로 생성하는 방법 (0) | 2021.01.06 |
Groovy에서 @Delegate, @Mixin 및 Traits의 차이점은 무엇입니까? (0) | 2021.01.06 |
"숫자"를 입력 할 때 항상 위쪽 / 아래쪽 화살표를 표시 할 수 있습니까? (0) | 2021.01.06 |