2016-07-15 74 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,你可以先让销售人员感到满意,然后为每个销售人员获得单一计数。只是一个帮助将问题分解成小问题的思想。 :) –