python读取csv文件作为字典并排序和增加计数器

jes516

我希望有人指出我正确的方向。从我的阅读中,我相信使用字典最适合这种需求,但是我绝不是一名熟练的程序员,我希望有人可以给我一些帮助。这是我拥有的CSV文件:

11362672,091914,100914,100.00,ITEM,11,N,U08
12093169,092214,101514,25.00,ITEM,11,N,U10
12162432,091214,101214,175.00,ITEM,11,N,U07
11362672,091914,100914,65.00,ITEM,11,N,U08
11362672,091914,100914,230.00,ITEM,11,N,U08

我想将第一列作为键,然后将第二列作为该键的值,以便:

  1. 按键对数据排序
  2. 应对事件
  3. 追加柜台

这是我想要获得的输出:

1,11362672,091914,100914,100.00,ITEM,11,N,U08 # occurrence 1 for key: 11362672
2,11362672,091914,100914,65.00,ITEM,11,N,U08 # occurrence 2 for key: 11362672
3,11362672,091914,100914,230.00,ITEM,11,N,U08 # occurrence 3 for key: 11362672
1,12093169,092214,101514,25.00,ITEM,11,N,U10 # occurrence 1 for key: 12093169
1,12162432,091214,101214,175.00,ITEM,11,N,U07 # occurrence 1 for key: 12162432

我需要保持每一行的完整性,这就是为什么我认为词典效果最好的原因。我没有很多,但这就是我开始的目的。这是我需要帮助进行排序,计数和附加计数器的地方。

import csv
with open('C:/Download/item_report1.csv', 'rb') as infile:
     reader = csv.reader(infile)
     dict1 = {row[0]:row[1:7] for row in reader}
     print dict1

给我:

{
'11362672': ['091914', '100914', '230.00', 'ITEM', '11', 'N'], 
'12093169': ['092214', '101514', '25.00', 'ITEM', '11', 'N'], 
'12162432': ['091214', '101214', '175.00', 'ITEM', '11', 'N']
}
马特

简要地说,您应该使用计数器来计算键值,并使用列表来存储行。

在您读取csv时,请跟踪您看到键值的次数,并在您读取键值时将其插入每行的开头。

读入文件后,可以首先按键值对其进行排序,然后按出现次数对它进行排序。

import csv

counter = {}
data = []

with open('report.csv','rb') as infile:
  for row in csv.reader(infile):
    key = row[0]
    if key not in counter:
      counter[key] = 1
    else:
      counter[key] += 1
    row.insert(0,counter[key])
    data.append(row)

for row in sorted(data,key=lambda x: (x[1],x[0])):
  print row

这又是同一回事,写的略有不同,按照官方的风格指南有4个空格,而不是我个人偏爱的两个。

import csv

# key function for sorting later
def second_and_first(x):
    return (x[1],x[0])

# dictionary to store key_fields and their counts
counter = {}
# list to store rows from the csv file
data = []

with open('report.csv','rb') as infile:
    for row in csv.reader(infile):
        # For convenience, assign the value of row[0] to key_field
        key_field = row[0]
        # if key_field is not in the dictionary counter. Add it with a value of 1
        if key_field not in counter:
            counter[key_field] = 1
        # otherwise, it is there, increment the value by one.
        else:
            counter[key_field] += 1
        # insert the value associated with key_field in the counter into the start of
        # the row
        row.insert(0,counter[key_field])
        # Append the row to 
        data.append(row)

for row in sorted(data,key=second_and_first):
    print row

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免在Python循环中增加计数器

来自分类Dev

角度:长按增加计数器

来自分类Dev

SESSION循环,增加计数器

来自分类Dev

在 for 循环中增加计数器

来自分类Dev

初始化字典,循环浏览列表,在字典中添加单词并增加计数器

来自分类Dev

为什么在Cassandra中增加计数器时会看到“读取”?

来自分类Dev

在Java和C ++中增加计数器的最佳方法?

来自分类Dev

根据计数器增加Python字典值

来自分类Dev

无法在Android中使用SharedPreferences增加计数器

来自分类Dev

如何在Ruby循环中增加计数器

来自分类Dev

在MySQL DB中增加计数器的最快方法

来自分类Dev

在更新循环中增加计数器?

来自分类Dev

在R中的for循环中增加计数器

来自分类Dev

在嵌套的foreach循环中增加计数器

来自分类Dev

增加计数器但随着DELAY减少

来自分类Dev

创建新数组或增加计数器

来自分类Dev

长按React Native可以不断增加计数器

来自分类Dev

更快的方式破环或增加计数器?

来自分类Dev

Android Studio问题继续增加计数器

来自分类Dev

根据数组长度增加计数器

来自分类Dev

JavaScript onclick更改图像并增加计数器

来自分类Dev

如何在Ruby循环中增加计数器

来自分类Dev

SQL SERVER STUFF函数值增加计数器

来自分类Dev

创建新数组或增加计数器

来自分类Dev

查找-exec并增加计数器/进度

来自分类Dev

如何通过单击按钮增加计数器的值?

来自分类Dev

如何通过Cassandra python-driver ORM增加计数器列

来自分类Dev

避免在Python循环中有条件地增加计数器

来自分类Dev

CSV文件的Python计数器