python csv到字典 [英] python csv into dictionary
问题描述
我对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> $ 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屋!