gpt4 book ai didi

python - 如何将 csv 文件的内容读入一个类,每个 csv 行作为一个类实例

转载 作者:太空狗 更新时间:2023-10-30 02:25:52 25 4
gpt4 key购买 nike

我是 Python 新手,几天来我一直在为类作业而苦恼。我有一个包含如下数据的 csv 文件:

id,latitude,longitude,city,label,yr1970,yr1975,yr1980,yr1985,yr1990,yr1995,yr2000,yr2005
1,35.6832085,139.8089447,Tokyo,Tokyo,23.3,26.61,28.55,30.3,32.53,33.59,34.45,35.62

此文件中大约有 40 行,每行包含与世界城市相关的数据。如您所见,第一行是标题。我应该在 Python 中创建一个类并将 csv 文件读入该类,其中每一行都成为该类的一个实例。然后我将类实例存储在列表中。我已经能够创建一个存储所有数据的实例,但我似乎无法为每一行创建一个实例(而且我显然不想手动创建)。

这是我到目前为止所得到的:

import csv
Cities = []


with open('filepath','rb') as f:
cityList = csv.reader(f)
for row in cityList:
if row != 'label':
for row in cityList:
citysName = row[3]


class City:

def __init__(self, cityName=row[3], Label=row[4], Lat=row[1],
Lon=row[2], yr1970=row[5], yr1975=row[6], yr1980=row[7],
yr1985=row[8], yr1990=row[9], yr1995=row[10], yr2000=row[11],
yr2005=row[12], yr2010=row[13]):
self.cityName = cityName
self.label = Label
self.lat = Lat
self.lon = Lon
self.yr1970 = yr1970
self.yr1975 = yr1975
self.yr1980 = yr1980
self.yr1985 = yr1985
self.yr1990 = yr1990
self.yr1995 = yr1995
self.yr2000 = yr2000
self.yr2005 = yr2005
self.yr2010 = yr2010

citysName = City()

Cities.append(citysName.cityName)
Cities.append(citysName.label)
Cities.append(citysName.lat)
Cities.append(citysName.lon)
Cities.append(citysName.yr1970)
Cities.append(citysName.yr1975)
Cities.append(citysName.yr1980)
Cities.append(citysName.yr1985)
Cities.append(citysName.yr1990)
Cities.append(citysName.yr1995)
Cities.append(citysName.yr2000)
Cities.append(citysName.yr2005)
Cities.append(citysName.yr2010)

print Cities

同样,我对 Python(和一般的编码)还很陌生,我意识到这段代码不好,但我很难找到将 csv 文件读入 Python 类的技巧。

最佳答案

你可以试试这个:

import csv
class City:
def __init__(self, row, header):
self.__dict__ = dict(zip(header, row))

data = list(csv.reader(open('file.csv')))
instances = [City(i, data[0]) for i in data[1:]]

但是,由于您提到有很多行,您可能希望为每个城市创建一个 id 作为列表中的字符串表示形式:

import csv
class City:
def __init__(self, row, header, the_id):
self.__dict__ = dict(zip(header, row))
self.the_id = the_id
def __repr__(self):
return self.the_id

data = list(csv.reader(open('file.csv')))
instances = [City(a, data[0], "city_{}".format(i+1)) for i, a in enumerate(data[1:])]

您的输出将是这样的列表:

[city_1, city_2, city_3...]

任何属性都可以这样调用:

instances[1].latitude

关于您最近的评论,要通过城市名称访问城市属性,您可以稍微重组实例:

instances = {a[3]:City(a, data[0], "city_{}".format(i+1)) for i, a in enumerate(data[1:])}

关于python - 如何将 csv 文件的内容读入一个类,每个 csv 行作为一个类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47445586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com