如何从csv获取数据到python对象

时间:2017-11-06 00:27:20

标签: python-3.x object import-csv

我是初学者python用户。无法以所需的对象格式将数据从csv获取到python以满足python函数。 如果我在python中手动创建数据(而不是从csv中引入),则以下代码可以正常工作:

class Student(object):
   pass

john = Student()
#score tuple
john.score = (85.0, 42.0/2.0)

bob = Student()
bob.score = (45.0, 19.0/2.0)

john.rank = 1
bob.rank = 2

ExternalCode.AdjustStudents([john, bob])

但是我需要它自动工作,而不必每次都手动输入数据,因为会有成千上万的更新 - 因此需要能够从csv引入数据。

csv文件格式为: 约翰,85,21,1 bob,45,9.5,2

学生对象将具有分数属性(第2列和第3列作为元组)以及排名属性(第4列)。所需的对象格式与上面手动代码生成的格式相同。

手动代码生成所需格式的一个示例是,当我在手动代码后执行以下打印时:

print(" John: score1={0[0]:.3f} score2={0[1]:.3f}".format(john.skill)) 

我得到了这个结果:

约翰:得分1 = 25.000得分2 = 8.333

干杯,

史蒂夫

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你会问你如何create variables dynamically。操作globals() dict以创建新变量不是一个好主意,您应该使用列表或字典来存储您的csv数据。

您似乎需要一个列表,所以:

  1. 定义列表(下例中的student_list)。
  2. 打开csv文件。
  3. 创建csv.reader
  4. 迭代行。
  5. 将数字转换为浮点数。
  6. 创建Student个实例并传递名称和数字。
  7. 最后将此学生实例附加到student_list
  8. 因此,如果您的csv文件看起来像那样,

    name,score1,score2,rank
    john,85,21,1
    sarah,72,19,2
    bob,45,19,3
    

    尝试以下代码:

    import csv
    
    
    class Student:
    
        def __init__(self, name, score, rank):
            self.name = name
            self.score = score
            self.rank = rank
    
    
    student_list = []
    
    with open('temp.csv', newline='') as csv_file:
        reader = csv.reader(csv_file)
        next(reader, None)  # Skip the header.
        # Unpack the row directly in the head of the for loop.
        for name, score1, score2, rank in reader:
            # Convert the numbers to floats.
            score1 = float(score1)
            score2 = float(score2)
            rank = float(rank)
            # Now create the Student instance and append it to the list.
            student_list.append(Student(name, (score1, score2), rank))
    
    # Then do something with the student_list.
    

答案 1 :(得分:0)

您可以在pandas的帮助下阅读csv文件。

在pandas中,有read_csv("filename/filepath")函数从csv文件中读取数据并将其存储为数组。