python csv到字典 [英] python csv into dictionary

查看:193
本文介绍了python csv到字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对python很新。我需要创建一个类将csv数据加载到字典中。



我想要能够控制键和值
所以让我们说下面的代码,我可以随时拉出worker1.name或worker1.age。

  class ageName(object):
'''代表一个人的类'''
def __init __(self,name,age):
self.name = name
self.age = age
$ b b worker1 = ageName('jon',40)
worker2 = ageName('lise',22)

现在如果我们打印它,你会看到它存储在字典
print worker1 .__ dict__
print worker2 .__ dict__

'''
{'age':40,'name':'jon'}

{'age':22,'name':'lise'}

'''


key)worker1.name我们得到(值)
print worker1.name

'''

jon

'''

但我无法加载我的csv数据到键和值。 >

[1]我想创建自己的密钥
worker1 = ageName([name],[age],[id],[gender])



[2]每个[name],[age],[id]和[gender]来自csv数据文件中的特定列



我真的不知道如何工作。我尝试了很多方法,但我失败了。我需要一些帮助才能开始使用。



----编辑
这是我的原始代码

  import csv 

#让我们先让学生成为一个对象

class Student():
def __init__ (self):
self.fname = []
self.lname = []
self.ID = []
self.sport = []
#let我们读这个文件
for row in list(csv.reader(open(copy-john.csv,rb)))[1:]:
self.fname.append 0])
self.lname.append(row [1])$ ​​b $ b self.ID.append(row [2])
self.sport.append $ b def Tableformat(self):
print%-14s |%-10s |%-5s |%-11s%('名字','姓' )
print - * 45
for(i,fname)in enumerate(self.fname):
print%-14s |%-10s |%-5s |%3s
def(self):
print self.lname
$ b b class Database(Student):
def __init __(self):
g = 0
choice = ['Basketball','Football','Other','Baseball','Handball' 'soccer','Volleyball','I do not like sport']
data = student.sport
k = len(student.fname)
print k
freq = {}
for i in data:
freq [i] = freq.get(i,0)+ 1
for i in choice:
如果我不在频率:
freq [i] = 0
print i,freq [i]


student = student()
database = code>



这是我当前的代码(不完整)

  import csv 
class Student(object):
'''表示一个人的类'
def __init __(self,lname,fname,ID,sport)
self.lname = lname
self.fname = fname
self.ID = ID
self.sport = sport
reader = csv.reader(open -john.csv'),delimiter =',',quotechar ='')
student = [学生(row [0],row [1],row [2],row [3] in阅读器] [1 ::]
print%-14s |%-10s |%-5s |%-11s%('名字','姓' )
print - * 45
for i in range(len(student)):
print%-14s |%-10s |%-5s |%3s% [i] .lname,student [i] .fname,student [i] .ID,student [i] .sport)

choice = ['Basketball','Football','Other' '棒球','手球','足球','排球','我不喜欢运动']
lst = []
h = 0
k = b#23
for i in range(len(student)):
lst.append(student [i] .sport)#合并

):
print a,lst.count(a)

for i in set(choice):
如果i不在集合中(lst):
lst。 append(i)
lst.count(i)= 0
print lst.count(i)


解决方案

  import csv 

reader = csv.reader(open('workers.csv',newline =''),delimiter =',',quotechar ='')
workers = [ageName(row [0],row [1])读取行]
 <$ c> 

$ c>>>>> workers [0] .name
'jon'

改变



是否有任何理由使用旧样式类?我在这里使用新风格。

  class Student:
sports = []
def __init __ self,row):
self.lname,self.fname,self.ID,self.sport = row
self.sports.append(self.sport)
def get(self):
return(self.lname,self.fname,self.ID,self.sport)

reader = csv.reader(open('copy-john.csv'),delimiter =' ,',quotechar ='')
print%-14s |%-10s |%-5s |%-11s%tuple(reader.next())#从csv中读取标题行
打印 - * 45
学生=列表(地图(学生,读者))#读取所有剩余行
学生在学生:
print%-14s |%-10s |% -5s |%3s%student.get()

#打印学生指定的所有运动
for set(Student.sports):#class attribute
print s,Student.sports.count(s)

#打印未选择的运动
allsports = ['Basketball','Football','Other','Baseball'手工','足球','排球','我不喜欢运动']
为s(allsports) - 设置(Student.sports):
打印s,0

希望这会给你一些关于python序列的力量的想法。 ;)



编辑2,尽可能缩短...只是为了炫耀:P



女士们先生们,7(.5)行。

  allsports = ['Basketball' ','其他','棒球','手球',
'足球','排球','我不喜欢运动']
sports = []
reader = csv。
在读取器中的行:
如果reader.line_num:sports.append(s [3])
print%-14s | %10s |%-5s |%-11s%tuple
for allsports:print s,sports.count(s)


I am pretty new to python. I need to create a class that loads csv data into a dictionary.

I want to be able to control the keys and value So let say the following code, I can pull out worker1.name or worker1.age anytime i want.

class ageName(object):
'''class to represent a person'''
def __init__(self, name, age):
self.name = name
self.age = age

worker1 = ageName('jon', 40)
worker2 = ageName('lise', 22)

#Now if we print this you see that it`s stored in a dictionary
print worker1.__dict__
print worker2.__dict__
#
'''
{'age': 40, 'name': 'jon'}
#
{'age': 22, 'name': 'lise'}
#
'''
#

#when we call (key)worker1.name we are getting the (value)
print worker1.name
#
'''
#
jon
#
'''

But I am stuck at loading my csv data into keys and value.

[1] I want to create my own keys worker1 = ageName([name],[age],[id],[gender])

[2] each [name],[age],[id] and [gender] comes from specific a column in a csv data file

I really do not know how to work on this. I tried many methods but I failed. I need some helps to get started on this.

---- Edit This is my original code

import csv

# let us first make student an object

class Student():
    def __init__(self):
        self.fname = []
        self.lname = []
        self.ID = []
        self.sport = []
        # let us read this file
        for row in list(csv.reader(open("copy-john.csv", "rb")))[1:]:
            self.fname.append(row[0])
            self.lname.append(row[1])   
            self.ID.append(row[2])
            self.sport.append(row[3])
    def Tableformat(self):
        print "%-14s|%-10s|%-5s|%-11s" %('First Name','Last Name','ID','Favorite Sport')
        print "-" * 45
        for (i, fname) in enumerate(self.fname):
           print "%-14s|%-10s|%-5s|%3s" %(fname,self.lname[i],self.ID[i],self.sport[i])
    def Table(self):
        print self.lname

class Database(Student):
    def __init__(self):
        g = 0
        choice = ['Basketball','Football','Other','Baseball','Handball','Soccer','Volleyball','I do not like sport']
        data = student.sport
        k = len(student.fname)
        print k
        freq = {}
        for i in data:
            freq[i] = freq.get(i, 0) + 1
        for i in choice:
            if i not in freq:
                freq[i] = 0
            print i, freq[i]


student = Student()
database = Database()

This is my current code (incomplete)

import csv
class Student(object):
    '''class to represent a person'''
    def __init__(self, lname, fname, ID, sport):
        self.lname = lname
        self.fname = fname
        self.ID = ID
        self.sport = sport
reader = csv.reader(open('copy-john.csv'), delimiter=',', quotechar='"')
student = [Student(row[0], row[1], row[2], row[3]) for row in reader][1::]
print "%-14s|%-10s|%-5s|%-11s" %('First Name','Last Name','ID','Favorite Sport')
print "-" * 45
for i in range(len(student)):
    print "%-14s|%-10s|%-5s|%3s" %(student[i].lname,student[i].fname,student[i].ID,student[i].sport)

choice = ['Basketball','Football','Other','Baseball','Handball','Soccer','Volleyball','I do not like sport']
lst = []
h = 0
k = len(student)
# 23
for i in range(len(student)):
    lst.append(student[i].sport) # merge together

for a in set(lst):
    print a, lst.count(a)

for i in set(choice):
    if i not in set(lst):
        lst.append(i)
        lst.count(i) = 0
        print lst.count(i)

解决方案

import csv

reader = csv.reader(open('workers.csv', newline=''), delimiter=',', quotechar='"')
workers = [ageName(row[0], row[1]) for row in reader]

workers now has a list of all the workers

>>> workers[0].name
'jon'

added edit after question was altered

Is there any reason you're using old style classes? I'm using new style here.

class Student:
    sports = []
    def __init__(self, row):
       self.lname, self.fname, self.ID, self.sport = row
       self.sports.append(self.sport)
    def get(self):
       return (self.lname, self.fname, self.ID, self.sport)

reader = csv.reader(open('copy-john.csv'), delimiter=',', quotechar='"')
print "%-14s|%-10s|%-5s|%-11s" % tuple(reader.next()) # read header line from csv
print "-" * 45
students = list(map(Student, reader)) # read all remaining lines
for student in students:
    print "%-14s|%-10s|%-5s|%3s" % student.get()

# Printing all sports that are specified by students
for s in set(Student.sports): # class attribute
    print s, Student.sports.count(s)

# Printing sports that are not picked 
allsports = ['Basketball','Football','Other','Baseball','Handball','Soccer','Volleyball','I do not like sport']
for s in set(allsports) - set(Student.sports):
    print s, 0

Hope this gives you some ideas of the power of python sequences. ;)

edit 2, shortened as much as possible... just to show off :P

Ladies and gentlemen, 7(.5) lines.

allsports = ['Basketball','Football','Other','Baseball','Handball',
             'Soccer','Volleyball','I do not like sport']
sports = []
reader = csv.reader(open('copy-john.csv'))
for row in reader:
    if reader.line_num: sports.append(s[3])
    print "%-14s|%-10s|%-5s|%-11s" % tuple(s)
for s in allsports: print s, sports.count(s)

这篇关于python csv到字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆