私はPythonスクリプトを使用して処理する必要がある、大きなコンマ区切りのテキストファイル(最大は約15GB)をいくつか持っています。問題は、ファイルの中に散発的にDOS EOF(Ctrl-Z)文字が含まれていることです。 (なぜ私はそれらを生成しなかったのか尋ねないでください)。もう1つの問題は、ファイルがWindowsマシン上にあることです。Windows上でPythonを使用してEOF/Ctrl-Z文字を含む巨大なテキストファイルを処理する方法は?
Windowsでは、スクリプトでこれらの文字のいずれかが検出されると、ファイルの最後にあるとみなされ、処理が停止します。さまざまな理由から、私は他のマシンにファイルをコピーすることは許可されていません。しかし、私はまだそれらを処理する必要があります。ここで
は私のアイデアは、これまでのところ、次のとおりです。
- は
chr(26)
に等しいバイトを投げ、バイナリモードでファイルを読み込みます。これはうまくいくが、それはほぼ永遠に続くだろう。 sed
のようなものを使用して、EOF文字を削除します。残念ながら、私が言うことができる限り、Windows上のsed
は同じ問題を抱えており、EOFが見えるときに終了します。- 何らかの種類の
Notepad
プログラムを使用して、検索と置換を行います。しかし、Notepad
型プログラムは15GBファイルにうまく対応していないことが判明しました。
私の理想的なソリューションは、単なるテキストとしてファイルを読んで、単純にCtrl-Zの文字を無視するためにいくつかの方法だろう。これを達成するための合理的な方法はありますか?
Cygwinのような擬似Unix環境下で 'sed'を実行してみましたか?これはまさにこの目的のために作られたもので、私はそこにEOF文字の周りの道がイメージしなければなりません。 – MattDMo
これは、テキストファイルのCtrl + ZをEOFとして扱うPythonではありません。 Windowsでは、どのプログラミング言語でも、テキストモードでファイルを開くことは不可能であり、Ctrl + Zをファイルの終わりとして扱うことはできません。 –
@TimPeters、私はそれが当てはまるとは思わない - 私はWindows API ['CreateFile'](http://msdn.microsoft.com/en-us/library/windows/)でバイナリ/テキストフラグを見つけることを敢行するdesktop/aa363858(v = vs.85).aspx)。それは慣習が非常に普及しているので、それらをバイパスするのは難しいです。 –