簡體   English   中英

檢查csv文件是否具有相同的項目

[英]Checking if csv files have same items

我有兩個.csv文件。 一個有info1,一個有info2。 文件看起來像這樣
文件1:

20170101,,,d,4,f,SWE
20170102,a,,,d,f,r,RUS  <-

文件2:

20170102,a,s,w,,,,RUS  <-
20170103,d,r,,,,FIN

我想組合這兩行(標記為“< - ”)並組合這樣的組合行:

20170102,a,s,w,d,f,r,RUS 

我知道我可以做類似這樣的腳本:

for row1 in csv_file1:
    for row2 in csv_file2:
        if (row1[0] == row2[0] and row1[1] == row2[1]):
            do something

有沒有其他方法可以找出哪些行在開頭有相同的項目或這是唯一的方法? 這是找出相似之處的非常緩慢的方法,並且在10萬行文件上運行需要幾分鍾。

您的實現是O(n^2) ,將一個文件中的所有行與另一個文件中的所有行進行比較。 更糟糕的是,如果您為第一個文件中的每一行重新讀取第二個文件。

您可以通過從第一個文件的內容構建索引來顯着提高速度。 索引可以像字典一樣簡單,文件的第一列作為鍵,行作為值。 您可以在第一個文件的一次傳遞中構建該索引。 然后在第二個文件上進行一次傳遞,如果id在索引中,則檢查每一行。 如果是,則打印合並的行。

index = {row[0]: row for row in csv_file1}

for row in csv_file2:
    if row[0] in index:
        # do something

特別感謝@martineau構建索引的dict理解版本。

如果第一個文件中可能有多個具有相同id的項,則索引可以指向這些行的列表:

index = {}
for row in csv_file1:
    key = row[0]
    if key not in index:
        index[key] = []
    index[key].append(row)

這可以使用defaultdict簡化一下:

from collections import defaultdict

index = defaultdict(list)
for row in csv_file1:
    index[rows[0]].append(row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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