2017-06-09 10 views
1

私は、50,000以上のエントリを持ち、増加している非常に大きなcsvファイルを持っています。私のファイルには、この構造を有する:csv pythonで要素を見つけるのに最も良い方法

ID;name;battery;... 
    101;a,3.3;... 
    102;b,3.3;... 
    103;c,3.2;... 

私はPythonでCSVファイルを読み取る方法を知っているが、私は新しいエントリが新しいの書き換えを避けるために、CSVファイル上にある場合は見つけるための最善の方法何ができるかを知りたいですライン。私はこのような何かやっていた

if new_id in open(log.csv).read(): 

すべてのヘルプやアドバイスが高く評価されるだろう。

編集:私は繰り返しを避けるための良い方法は、検索用に最適化された特殊なデータ構造を使用することですID

+0

は、あなたが全体のライン '103かどうかを確認したいですかを

set()にファイルから既存のIDを読みます; c、3.2、... 'がファイル内にあるか、単に' id'ですか? –

+2

「改行を避ける」とはどういう意味ですか? – user3764893

+2

ここで[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の匂いがします。あなたは正確に何をしようとしていますか? – ozgur

答えて

1

によってフィルタリングします。 Pythonでは、例えばset()を使用することができます。 set()は、ハッシュテーブルに基づいており、時間の複雑さがO(n)の検索を提供します。スキーマは以下の通りである。

file = open('log.csv', 'rw') 
# include only ids to set: 
entries = set(i.split(',')[0] for i in file.readlines()[1:]) 

チェック条件ごとに新しい行を挿入:

# new_entry - is a new line 
new_id = new_entry.split(',')[0] # get new id 
if new_id not in entries: 
    file.write(new_entry) # Maybe newline appending is needed 
    entries.add(new_id) # Update a set of existing rows 
関連する問題