如何在python中使用csv作为实例属性?

Posted

技术标签:

【中文标题】如何在python中使用csv作为实例属性?【英文标题】:How to use csv as instance attritubes in python? 【发布时间】:2022-01-18 17:01:51 【问题描述】:

如何导入 csv 文件并将其用作我的类的实例属性?

这是我写的代码:

import random
import csv 

class Cars:
    
    def __init__(self, driver, team):
        self.driver = driver
        self.team = team
    

class Race:
    def __init__(self, lap = 55):
        self.lap = lap
        self._finished = []
        
    def race(self, list_of_cars):
        for c in list_of_cars:
            c.distance = 0
            
        while list_of_cars:
            for c in list_of_cars:
                c.distance += random.randint(100,300)
                if c.distance >= self.lap:
                    self._finished.append(c)
                    list_of_cars.remove(c) 
            
    def print_results(self):
        print("Tournament Result\n" + "_" * 18)
        for i, c in enumerate (self._finished):
            print (i+1, c.driver, c.team)
            
cars_list = []
with open("driverandteam.csv",'r') as file:
    csv_reader = csv.reader(file)
    for line in csv_reader:
        cars_list.append(Cars(line[0],line[1]))


r = Race(65)
cars = cars_list
r.race(cars)
r.print.results()

driverandteam.csv 看起来像这样

Verstappen, Red Bull
Perez, Red Bull
Hamilton, Mercedes
Bottas, Mercedes
Leclerc, Ferrari
Sainz, Ferrari
Ricciardo, McLaren
Norris, McLaren
Ocon, Alphine
Alonso, Alphine
Tsunoda, AlphaTauri
Gasly, AlphaTauri
Vettel, Aston Martin
Stroll, Aston Martin
Latifi, Williams
Russell, Williams
Raikkonen, Alfa Romeo
Giovinazzi, Alfa Romeo
Mazepin, Haas
Schumacher, Haas

我在代码的第 36 行不断收到“超出范围列表”错误,但我不明白为什么。如何修复我的代码以使其正常工作。

【问题讨论】:

【参考方案1】:

我在本地运行您的代码并使用提供的 csv(感谢您提供所有需要的信息!),最后我不得不对代码进行一点小改动:

r.print_results()

之后一切都按预期运行,我得到以下输出:

Tournament Result
__________________
1 Verstappen  Red Bull
2 Hamilton  Mercedes
3 Leclerc  Ferrari
4 Ricciardo  McLaren
5 Ocon  Alphine
6 Tsunoda  AlphaTauri
7 Vettel  Aston Martin
8 Latifi  Williams
9 Raikkonen  Alfa Romeo
10 Mazepin  Haas
11 Perez  Red Bull
12 Sainz  Ferrari
13 Alonso  Alphine
14 Stroll  Aston Martin
15 Giovinazzi  Alfa Romeo
16 Bottas  Mercedes
17 Gasly  AlphaTauri
18 Schumacher  Haas
19 Norris  McLaren
20 Russell  Williams

所以我无法重现您收到的错误,如果您仍然遇到此错误,请告诉我们,并且可以更新任何代码/数据以帮助重现。

【讨论】:

以上是关于如何在python中使用csv作为实例属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中使用其他属性将实例作为属性传递

在 Python 中,为啥属性优先于实例属性?

如何使用python修复在bigquery中上传csv文件

Python 3:如何在不保存在磁盘上的情况下将 pandas 数据帧作为 csv 流上传?

如何在 Python 中为 csv.reader 设置语言环境?

python中的类中属性元素加self.和不加self.的区别