我对python完全陌生,而对一般编程人员来说基本上是新的。 我有一个涉及通过一个CSV文件扫描并保存每一行作为一个列表大学分配。我的文件是英超联赛足球数据的列表,因此CSV文件的结构如下:
date; home; away; homegoals; awaygoals; result;
01/01/2012; Man United; Chelsea; 1; 2; A;
01/02/2012; Man City; Arsenal; 1; 1; D;
等等等
当前每一列都存储在一个变量中:
date = row[0]
home = row[1]
away = row[2]
homegoals = row[4]
awaygoals = row[5]
所以,我现在可以例如访问,有三个以上的目标所有的游戏
totalgoals = homegoals+awaygoals
if totalgoals > 3:
print(date, home, homegoals, awaygoals, away)
我可以访问所有具有特定团队特征的游戏:
if (home or away) == "Man United":
print(date, home, homegoals, awaygoals, away)
非常基本,我知道。 我希望能够更深入地跟踪事物。因此,例如,我想能够所在的球队还没有在3场比赛中赢得了等访问结果 我希望能够找出一支球队的得分偏低。
现在,从网上阅读一段时间以来,在我看来,您的操作方式是结合使用字典和列表。
到目前为止:
import csv
with open('premier_league_data_1819.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=';')
dates = []
hometeams = []
awayteams =[]
homegoals = []
awaygoals = []
results = []
next(readCSV)
for row in readCSV:
date = row[0]
home = row[1]
away = row[2]
hg = int(row[3]) #Home Goals
ag = int(row[4]) #Away Goals
ftr = row[6] #Result
dates.append(date)
hometeams.append(home)
awayteams.append(away)
homegoals.append(hg)
awaygoals.append(ag)
results.append(ftr)
如果任何人都可以点我在正确的方向上这一点,我将不胜感激。 最好知道实现此目标的最佳方法,这样我才不会感到困惑。
我认为,我首先需要将所有球队的游戏存储在列表中,然后将该列表添加到包含所有球队记录(以球队名称为键)的字典中。
答案 0 :(得分:1)
好,你已经在使用csv
模块 - 它会为您节省大量的头痛与解析您的数据。您也可以访问DictReader
类模块中 - 它会返回与列名行作为你的密钥没有一些我下面包括额外的处理。您希望将每个游戏的统计信息归为一组,以便进行汇总。我想办法,与这样的:
games = []
for row in readCSV:
date, home, away, hg, ag, ftr = row[0:-1] # this is called 'unpacking'
# alternatively: date, home, away, hg, ag, ftr, _ = row
# using _ this way to consume and ignore a value is another python idiom
# This creates a dictionary where you can retrieve values by key, rather than index
games.append(dict(date=date, home=home, away=away, hg=hg, ag=ag, ftr=ftr)
现在,你有一个字典列表,一个表示每场比赛,你可以与他们多一点自然交互:
games[0]['home'] # The home team of the first game
# All 'Man United' games
man_united = [game for game in games if 'Man United' in (game['home'], game['away'])]
sum(game['hg'] for game in games) # total number of home goals for all games.
答案 1 :(得分:1)
您还可以通过这种方式使用方法DictReader
:
data = []
with open('premier-league.csv') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
for row in reader:
data.append(row)
print(data[0][' home']) # <-- note the space
#=> Man United
请注意,在您的CSV分隔符后有一个空格,应该会更好,如果你能CSV文件更改为:
date;home;away;homegoals;awaygoals;result;
01/01/2012;ManUnited;Chelsea;1;2;A;
01/02/2012;ManCity;Arsenal;1;1;D;
或者,使用
reader = csv.DictReader(csvfile, delimiter=';', skipinitialspace=True)