2016-07-15 59 views
1

我有一個腳本,它將銷售值寫入文件中的單獨行,最終目標是將數據保存到數據庫中。我遇到的問題是,對於同一銷售人員,日期,產品,價格和數量有重複的條目。查找重複項,添加到變量並刪除

我的代碼是這樣寫的文件:

John 07-15-2016 Tool Belt $100 2 
Sara 07-15-2016 Hammer $100 3 
John 07-15-2016 Tool Belt $100 2 
John 07-15-2016 Tool Belt $100 2 
Sara 07-15-2016 Hammer $100 3 

如何刪除重複項,並添加在一起?即輸出爲:

John 07-15-2016 Tool Belt $100 6 
Sara 07-15-2016 Hammer $100 6 

我用計數器,但它不趕多個實例,我也不能找到一種方法,添加兩個在一起。

任何幫助,將不勝感激。

腳本:

for line in s: 
     var = re.compile(r'(\$)',re.M) 
     line = re.sub(var, "", line) 
     var = re.compile(r'(\,)',re.M) 
     line = re.sub(var, "", line) 
     line = line.rstrip('\n') 
     line = line.split("|") 
     if line[0] != '': 
      salesperson = str(salesperson) 
      date = dt.now() 
      t = line[0].split() 
      print t 
      t = str(t[0]) 
      try: 
       s = dt.strptime(t, "%H:%M:%S") 
      except: 
       s = dt.strptime(t, "%H:%M") 
      s = s.time() 
      date = dt.combine(date, s) 
      date = str(date) 
      price = line[1] 
      quantity = line[2] 
     fn.write("%s %s %s %s \n" % (salesperson, date, price, quantity)) 
    fn.close() 
+2

你是怎麼寫這個文件的?顯示您的腳本的相關部分 – Gocht

+0

@Gocht我編輯它以顯示腳本 – Dorian

+1

您可以創建一個字典,以便在讀取文件時跟蹤值,並且只有在完成處理數據後才寫入。一路書寫不允許你有效地回溯。 – Hobbes

回答

0

sample.csv

John 07-15-2016 Tool Belt $100 2 
Sara 07-15-2016 Hammer $100 3 
John 07-15-2016 Tool Belt $100 2 
John 07-15-2016 Tool Belt $100 2 
Sara 07-15-2016 Hammer $100 3 

test.py

with open("sample.csv") as inputs: 
    mydict = dict() 
    for line in inputs: 
     elements = line.strip().split() 
     key = " ".join(elements[0: len(elements) - 1]) 
     mydict[key] = mydict.get(key, 0) + int(elements[-1]) 

    # iterate the dictionary and print out result 
    for key, value in mydict.iteritems(): 
     print "{0} {1}".format(key, value) 

我使用字典,每一分割行,並使用第一len(elements) - 1元素作爲密鑰,然後增加在最後一個元件迭代所有行。

mydict.get(key, 0)返回值,如果鍵在字典中存在,否則返回0值

結果: python2.7 test.py

Sara 07-15-2016 Hammer $100 6 
John 07-15-2016 Tool Belt $100 6 

因此你的情況,你需要:

elements = line.strip().split() 
key = " ".join(elements[0: len(elements) - 1]) 
mydict[key] = mydict.get(key, 0) + int(elements[-1]) 
+0

這工作!謝謝!! – Dorian

+0

@Dorian很高興幫助:) – haifzhan

0

假設你的文件被稱爲records.txt

將文件分割成一個單獨的文件每個銷售人員:

awk '{print > $1}' records.txt

再到具體的算每位銷售員的物品:

cat Sara | grep 'Hammer' | awk '{print $NF,sum}' | awk '{s+=$1} END {print s}'

+0

其他銷售人員出售錘子,所以我不認爲這會起作用... – Dorian

+0

@Dorian,你可以先讓銷售人員感到滿意,然後爲每個銷售人員獲得單一計數。只是一個幫助將問題分解成小問題的思想。 :) –