我试图想出一个可以读取.csv
档案的功能,从那里我可以得到例如学生考试成绩,例如:
NOME,G1,G2
Paulo,5.0,7.2
Pedro,6,4.1
Ana,3.3,2.3
Thereza,5,6.5
Roberto,7,5.2
Matheus,6.3,6.1
我设法在,
部分分割了这些线条,但我最终得到了一个矩阵:
[['NOME', 'G1', 'G2'], ['Paulo', '5.0', '7.2'], ['Pedro', '6', '4.1'], ['Ana', '3.3', '2.3'], ['Thereza', '5', '6.5'], ['Roberto', '7', '5.2'], ['Matheus', '6.3', '6.1']]
如何从一个列表转到另一个列表并设法获得其中的成绩? 这是我到目前为止的代码:
def leArquivo(arquivo):
arq = open(arquivo, 'r')
conteudo = arq.read()
arq.close
return conteudo
def separaLinhas(conteudo):
conteudo=conteudo.split('\n')
conteudo1 = []
for i in conteudo:
conteudo1.append(i.split(','))
return conteudo1
我从哪里开始?
答案 0 :(得分:2)
一个简单的for会做到这一点,即:
notas = [['NOME', 'G1', 'G2'], ['Paulo', '5.0', '7.2'], ['Pedro', '6', '4.1'], ['Ana', '3.3', '2.3'], ['Thereza', '5', '6.5'], ['Roberto', '7', '5.2'], ['Matheus', '6.3', '6.1']]
for nota in notas[1:]: ## [1:] skip the first item
nome = nota[0]
g1 = nota[1]
g2 = nota[2]
print ("NOME:{} | G1: {} | G2: {}".format(nome, g1, g2))
PS:如果您需要执行数学运算,您可能希望将g1
和g2
投射到float
- float(nota[1])
。
答案 1 :(得分:1)
由于您正在使用csv文件,因此您可能需要查看Python中的csv模块。该模块有许多方便的选项和形式,可以在其中读取数据。以下是csv.DictReader
阅读和使用的示例
import csv
# Read the data
with open('data.csv') as f:
reader = csv.DictReader(f)
data = [row for row in reader]
# Print it
for row in data:
print (' ').join(['Nome:',row['NOME'],'G1:',row['G1'],'G2:',row['G2']])
# Print only names and G2 grades as a table
print '- '*10
print 'NOME\t' + 'G2'
for row in data:
print row['NOME'] + '\t' + row['G2']
# Average of G1 and G2 for each student
print '- '*10
print 'NOME\t' + 'Average'
for row in data:
gpa = (float(row['G1']) + float(row['G2']))/2.0
print row['NOME'] + '\t' + str(gpa)
此处数据作为字典列表读取 - 列表中的每个元素都是表示数据集单行的字典。字典键是标题的名称(NOME
,G1
),值是该行的对应值。
在某些情况下,该特定形式可能很有用。在程序的第一部分中,数据使用键和值打印,每行一行。需要注意的是,词典是无序的 - 为了确保以某种特定的顺序打印,我们需要遍历字典"手动"。我使用join只是为了演示format
(实际上更强大)的替代方法,或者只是在两者之间键入空格。第二个用法示例将名称和第二个等级打印为具有适当标题的表。第三个计算平均值并将其打印为表格。
对我来说,这种方法在处理具有数千个条目的数据集时非常有用,这些条目有很多列 - 标题 - 我想单独研究(因此我不介意它们不按顺序排列)。要获取有序字典,您可以使用OrderedDict或考虑其他可用的数据结构。我也使用Python 2.7,但由于你将问题标记为3.X,链接指向3.X文档。