簡體   English   中英

在Python中索引非常大的csv文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM