2016-12-03 66 views
0

我使用python 2.7從CSV文件中清除一些數據,然後將其存入MySQL數據庫。在python中比較CSV中的數據

每一行都是帶有時間戳的用戶條目。

在我將數據發送到數據庫之前,我想檢查CSV中是否有重複的行(具有相同用戶名的兩行),然後使用定時器(在同一行上)來檢查保留哪一個。

# set up data container 
data = [] 

# read csv file 
with open(file, 'rU') as f: 
    # create file reader 
    reader = csv.reader(f) 

    # skip first row (headers) 
    next(reader) 

    # gather data in a table 
    for row in reader: 
     data.append(row) 

我想我得到與二維數組比較項目混淆......我知道,用戶名是data[][1]和定時器(INT)是data[][52]

我試圖創建一個新的列表如下:

usernames = [] 
cleaner_list = data 
for row in data: 
    if row[1] is in usernames: 
     # dupe 
    else: 
     usernames.append(row[2]) 

但嘗試的數據進行比較時,我一直在走出去的範圍,例如像這樣:

if row[1] is in usernames: 
     if row[52] > usernames[row[2]][52]: 
      # delete row[52] from cleaner_data 
     else: 
      # delete the equivalent row in usernames from cleaner_data 

我覺得我我推翻了這個,但我不能使用set,因爲我需要數據保持一致。我想創建一些獨特的用戶名枚舉列表,並過濾CSV列,但我不知道如何保持對行的正確引用,當我找到一個重複的,並需要檢查它的計時器之前刪除它。 任何幫助將非常感激!

回答

0

我會做下面的事情: 保留用戶關聯的最後一個時間戳字典。如果您在掃描CSV時發現更新的內容,請替換舊值。

cleaner_data = {} 
for row in data: 
    if row[1] not in cleaner_data: # user name not yet seen: add 
    cleaner_data[row[1]] = row 
    else: 
    if row[52] > cleaner_data[row[1]][52]: # already seen, but newer timestamp: replace 
     cleaner_data[row[1]] = row