查找重复项,添加到变量并删除

时间:2016-07-15 19:27:05

标签: python django counter

我有一个脚本将销售值写入文件中的单独行,最终目标是将数据保存到数据库中。我遇到的问题是,同一销售人员,日期,产品,价格和数量都有重复的条目。

我的代码就像这样写到文件中:

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 个答案:

答案 0 :(得分:0)

假设您的文件名为records.txt

将文件拆分为每个销售人员的单独文件:

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

然后计算每个销售人员的具体项目:

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

答案 1 :(得分: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])