Linuxの「より」非常に大きなタプル/ファイル/デシベルを記録/ numpy.ndarrayのためのpythonのコードのような?

StackOverflow https://stackoverflow.com/questions/3820503

質問

私は、バッファがちょうどLinuxコマンド「より」ようなことがあり、タプル/ csvファイル/ sqliteのDBレコード/ numpy.darrayにプロセスの巨大なレコードのバッファコードを探しに思います。

リクエストが巨大なデータレコード(多分億行)を処理することから来て、レコードは次のようになります:

0.12313 0.231312 0.23123 0.152432
0.22569 0.311312 0.54549 0.224654
0.33326 0.654685 0.67968 0.168749
...
0.42315 0.574575 0.68646 0.689596

私はnumpy.darrayでそれらを処理します。例えば、特別なデータがそれを処理見つけて、戻ってそれらを保存、または2つのCOLSを処理します。それが大きすぎるしかしnumpyのは、ファイルを読み込む場合は、直接それは私にメモリエラーが得られます。

そこで、私が処理するとき、MEMキャッシュページやLinuxのようなアダプタ「複数のファイル」コマンドは、メモリを節約するかもしれないと思う。

これらの生データは、異なる形式として現れる可能性があるため、 - CSV / sqlite_db / HDF5 / XML。私はその後、このアダプタは、より標準化することがしたい、「[]」「行」として使用私は、各レコードは[]のように表すことができると思うので、もっと一般的な方法かもしれません。

だから私はこのようなことがありルックス欲しいものアダプターます:

fd = "a opend big file" # or a tuple of objects, whatever, it is an iterable object can access all the raw rows 

page = pager(fd)

page.page_buffer_size = 100    # buffer 100 line or 100 object in tuple

page.seek_to(0)        # move to start
page.seek_to(120)      # move to line #120
page.seek_to(-10)      # seek back to #120

page.next_page()        
page.prev_page()

page1 = page.copy()

page.remove(0)

page.sync()

缶誰かが防ぐために私にいくつかのヒントを示します。

?車輪の再発明

ところで、ATpy、 http://atpy.sourceforge.net/ のモジュールのCAN同期でありますメモリに、外出先では、異なるフォーマットの生のデータソースとのnumpy.arrayが、しかし、それはまた、すべてのデータを読み込みます。

そしてpytable SQLはそれとHDF5ファイルでサポートされていないためかもしれないsqliteのDBとして人気として(これが間違っている場合は、私を許して)今のところ、私には適していません。

   My plan is write this tools in this way:
    1. helper.py        <-- define all the house-keeping works for different file format
                            |- load_file()
                            |- seek_backword()       
                            |- seek_forward()
                            | ...
    2. adapter.py       <-- define all the interface and import the helper to interact 
                            with raw data and get a way to interact with numpy.darray in somehow.
                            |- load()
                            |- seek_to()
                            |- next_page()
                            |- prev_page()
                            |- sync()
                            |- self.page_buffer_size
                            |- self.abs_index_in_raw_for_this_page = []
                            |- self.index_for_this_page = []
                            |- self.buffered_rows = []

おかげで、

RGS、

KC

役に立ちましたか?

解決

Ummmm ....あなたは本当に多くのリストよりも何も話していない。

fd = open( "some file", "r" )
data =  fd.readlines()

page_size = 100

data[0:0+page_size] # move to start
data[120:120+page_size] # move to line 120
here= 120
data[here-10:here-10+page_size] # move back 10 from here
here -= 10
data[here:here+page_size]
here += page_size
data[here:here+page_size]
私はあなたが実際に何かを発明する必要があることはないよ。

他のヒント

linecache のモジュールが役に立つかもしれ - あなたが効率的にから行を取得するためにgetline(filename, lineno)を呼び出すことができます与えられたファイルます。

あなたはまだどのように高く把握する必要がありますし、ワイド画面です。迅速なgooglanceは、おそらく古くなってそのうちのいくつかは、これを行うには約14種類の方法があることを示唆しています。 呪いのモジュールは、あなたの最善の策であることができ、私はあなたがしたい場合に必要なことだと思いますスムーズに後方にスクロールすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top