[英]Indexing very large csv files in Python
我覺得這是一個非常愚蠢的問題,但是我再也無法考慮這個問題了。
我以ID排序的csv格式有大量數據(60 + GB):
id, "{data}"
id2, "{data}"
...
我還有另一組數據需要以字典格式與此數據組合(當前分為一些腌制文件):
{player_id: {rating, [ids]}, player_id2: {rating, [ids]}, ... }
CSV數據中的ID對應於上面列表中的ID。 我想將每個id的詳細信息從csv數據放入此數據,這意味着我必須獲取一個id,在csv數據中尋找它,然后將其寫入此字典格式。 因此,這里的最大瓶頸是通過id查找csv文件中的數據並從磁盤讀取數據。
我當前的解決方案是將csv數據拆分為許多小文件(1-2mb),並索引包含哪些ID的文件,以便搜索數據比解析整個csv數據要快得多,但仍然不是恆定的,並且仍然需要在每個步驟中打開一個csv文件。
有更快的方法嗎? 我覺得自己很愚蠢,並且有一種更快的方法,因為我的多處理解決方案仍需要2周左右的時間才能完成。
很高興澄清我的問題不清楚。 謝謝。
def get_row(id):
with open("fname.csv") as f:
row = next(itertools.islice(f,id-1,id),None)
return row
它仍然會非常痛苦地緩慢...您應該考慮使用數據庫...或至少將數據存儲為固定寬度條目(即,每行始終為37個字節),如果您存儲固定寬度條目,則可以計算偏移offset = id*37;f.seek(offset);return f.read(37)
偏移offset = id*37;f.seek(offset);return f.read(37)
,應該大約是恆定時間...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.