2012-01-02 14 views
0

私は家族のコンピュータで見たいくつかのファイルについて調査中です。それらは主にテキストコンテンツの長いファイルですが、コンテンツは逆転しているように見えます。つまり、www.google.comではなくmoc.elgoog.wwwです。ファイルには非ASCII文字もたくさんあります。Pythonでファイルの内容を最初から最後に戻す

私はpythonがこのコンピュータ上でファイルを解析して正常に読み取れるようにするのに最適であり、ここで何をしているのかを知ることができます。

ありがとうございます!

+0

あなたが逆の順序でファイルを読み込む場合、それは動作しますか? –

+0

小さなファイルの場合、これは 'open( 'spam.txt')をf:spam = f.read()[:: - 1]' – wim

+0

として処理する必要があります。 – soulcheck

答えて

3

迅速かつ汚い小唄:

f = open(filename, "rb") 
s = f.read() 
f.close() 
f = open(output_filename, "wb") 
f.write(s[::-1]) 
f.close() 

はちょうどしかし、stringsの出力を逆にする方がよいかもしれません。これらのファイルが大きすぎていない場合は

+0

'f.write(反転)'は期待どおりに動作しません。 – jfs

+0

J.F. Sebastianが言っているように、私はこれに関して次のエラーメッセージを受け取ります。 'TypeError:文字列またはバッファでなければならない、逆転しない ' – namshub

+0

' 'f.write(' '。join(reversed(s)))'。 – ekhumoro

2

(すなわち、それらはRAMに収まる)、あなたが行うことができます:

for fn in list_of_original_files: 
    open(fn+'_reversed', 'w').write(reversed(open(fn).read())) 

またはより安全:

for fn in list_of_original_files: 
    with open(fn, 'r') as r: 
     with open(fn+'_reversed', 'w') as w: 
      w.write(reversed(r.read())) 
+0

'write(reversed())'が生成されます。 'TypeError:文字列またはバッファーでなければなりません。逆転しません。 ' – jfs

1

をあなたのファイルがメモリに収まると仮定すると(2回) :

from os import fsync 
import mmap 

def reverse(fw_file_path, bw_file_path): 
    with open(fw_file_path, 'rb')as fw_file: 
    fw_file_map = mmap.mmap(fw_file.fileno(), 0, access=mmap.ACCESS_READ) 
    with open(bw_file_path, "wb") as bw_file: 
     bw_file.write(''.join([c for c in reversed(fw_file_map)])) 
     bw_file.flush() 
     fsync(bw_file.fileno()) 
    fw_file_map.close() 

mmap()は、私のWindowsマシンとLinuxマシンの両方で、速度が他のapproac h。ファイルが大きすぎる場合は、前にチャンクしてreverse()を適用した後にキャッチしてみてください。逆の順序で

2

書き込みバイト:

import os 

bufsize = 1 << 15 
with open('file.in', 'rb') as f, open('file.out', 'wb') as fout: 
    f.seek(0, os.SEEK_END) # move to the end of file 
    for pos in reversed(xrange(0, f.tell(), bufsize)): 
     f.seek(pos, os.SEEK_SET) 
     fout.write(f.read(bufsize)[::-1]) 
+0

J.F. Sebastianありがとうございました。これは、ASCII以外のバイトも保存して処理を行っています。彼らはエンディアンに依存しないことを願っています!マルウェア/スパイウェアログになります。平らにして再建する時間。 – namshub

+0

これはあまり「ピジョンソニック」ではありませんが、私たちが達成しようとしていることは非常に非平凡ではありません。私はあなたがジェネレータの関数か何かでそれを賞賛するかもしれないと思いますが、これはずっと簡単です。 Upvoted。 – cha0site

関連する問題