IT TIP

가상 파일 처리는 어떻게합니까?

itqueen 2021. 1. 6. 20:35
반응형

가상 파일 처리는 어떻게합니까?


그래서 파일을 만들기 위해 다음을 사용합니다.

fileHandle = open('fileName', 'w')

그런 다음 내용을 파일에 쓰고 파일을 닫습니다. 다음 단계에서는 파일을 처리합니다. 프로그램이 끝나면 삭제해야하는 "실제 파일"이 생깁니다.

"물리적"파일과 똑같이 동작하지만 (동일한 방식으로 조작 할 수 있도록 허용) Python에서 실행이 끝날 때 존재하지 않는 "가상"파일을 작성하는 방법이 있습니까?


tempfile.SpooledTemporaryFile처음에는 임시 메모리 기반 가상 파일을 생성하지만 메모리에 보관 된 데이터가 지정된 데이터를 초과하는 경우 자동으로 물리적 디스크 기반 파일로 전환된다는 점에서 두 가지 장점을 모두 제공 하는 a 사용을 고려할 수 있습니다. 크기.

또 다른 좋은 기능은 (메모리를 사용할 때) 사용 중인 항목 에 따라 io.BytesIO또는 자동으로 사용하여 유니 코드 문자열 또는 이진 데이터 (바이트)를 읽고 쓸 수 있다는 것입니다.io.StringIOmode

유일한 까다로운 부분은 단계 사이에 파일을 닫는 것을 피해야한다는 사실 일 수 있습니다. 그렇게하면 메모리 나 디스크에서 파일이 삭제되기 때문입니다. 대신 파일 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

반응형