したがって、ファイルを作成するには、次を使用します。
fileHandle = open('fileName', 'w')
次に、内容をファイルに書き込み、ファイルを閉じます。次のステップでは、ファイルを処理します。プログラムの最後には、削除する必要がある「物理ファイル」ができあがります。
「物理」ファイルとまったく同じように動作する(同じ方法で操作できる)「仮想」ファイルを作成する方法はありますが、Pythonでの実行の最後には存在しませんか?
tempfile.SpooledTemporaryFile
最初に一時メモリベースの仮想ファイルを作成しますが、メモリに保持されているデータが指定された値を超えると、物理ディスクベースのファイルに自動的に切り替えるという意味で、両方の長所を提供する の使用を検討することをお勧めします。サイズ。
もう 1 つの優れた機能は、(メモリを使用する場合) 使用されているものに応じてio.BytesIO
orを自動的に使用することです。これにより、Unicode 文字列またはバイナリ データ (バイト) を読み書きできます。io.StringIO
mode
唯一の注意が必要なのは、ステップ間でファイルを閉じないようにする必要があるということです。そうすると、ファイルがメモリまたはディスクから削除されてしまうからです。seek(0)
代わりに、ファイルメソッド呼び出しを使用して最初に巻き戻すことができます。
ファイルを完全に処理して閉じると、ファイル内のデータ量が原因でファイルが物理ファイルにロールオーバーされた場合、ファイルはディスクから自動的に削除されます。
StringIO
モジュールにとBytesIO
がありますio
。
StringIO
は、テキスト モードで開かれたファイルのように動作しますio.open(filename, mode, encoding='...')
。つまり、Unicode 文字列の読み取りと書き込み ( でファイルを開くのと同じです)。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を仮想ファイルとして使用できます
from io import StringIO
output = 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()
ファイルではなくメモリに書き込む場合は、単純にテキストをバッファに書き込んで、次の関数を使用できます。
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")
最後に、何かをファイルに書き込んでからファイルを開いて、そのすべての内容をバッファーに読み取った場合と同じバッファーが得られます。さらに、プロセス中に (書き込みを完了する前に) バッファーを使用して、読み取りと書き込みの両方のためにファイルを作成したかのように、その中で検索を行うことができます。
StringIO
モジュールがあり、そのドキュメントを読んでください。使いやすいはずです。
ただし、これにより「ファイル」の内容がメモリに保持されることに注意してください。データが多すぎる場合は、/tmp などに実際のファイルを作成し、後で削除することをお勧めします。