希望有人能帮我。 我已经找了几个小时的解决办法,但还是没有找到。你知道吗
所以,我的问题是:
我写了一个脚本,从网上搜集了一些信息。你知道吗
哪些输出是多个列表,如以下列表:
|['Pierre-Emerick Aubameyang', ['172', '114', '19', '9/13', '14', '0', '0', '19', '35', '13702', '22'], [['Borussia Dortmund', '17/18', '8', '10', '1', '2/3', '0', '0', '0', '-', '1', '714', '2'], ['Borussia Dortmund', '16/17', '32', '31', '2', '2/4', '3', '0', '0', '1', '5', '2780', '4'], ['Borussia Dortmund', '15/16', '31', '25', '5', '3/4', '4', '0', '0', '3', '9', '2468', '8'], ['Borussia Dortmund', '14/15', '33', '16', '7', '1/1', '4', '0', '0', '2', '9', '2715', '5'], ['Borussia Dortmund', '13/14', '32', '13', '4', '-/-', '1', '0', '0', '12', '11', '1889', '3'], ['AS St.-Etienne', '12/13', '36', '19', '0', '1/1', '2', '0', '0', '1', '-', '3136', '0']]]|
并将此列表与以下内容一起保存(可能会有所帮助,找到解决方案):
with open('filename.csv', 'w', newline='') as file:
writer = csv.writer(file, delimiter=",", quotechar='|')
for pieler in spielers:
writer.writerow([pieler])
目前我只得到每行作为字符串的行,但我不理解/找不到一个解决方案将它转换成下面提到的列表。你知道吗
最后的结果应该是:
[['Pierre-Emerick Aubameyang', ['172', '114', '19', '9/13', '14', '0', '0', '19', '35', '13702', '22'], [['Borussia Dortmund', '17/18', '8', '10', '1', '2/3', '0', '0', '0', '-', '1', '714', '2'], ['Borussia Dortmund', '16/17', '32', '31', '2', '2/4', '3', '0', '0', '1', '5', '2780', '4'], ['Borussia Dortmund', '15/16', '31', '25', '5', '3/4', '4', '0', '0', '3', '9', '2468', '8'], ['Borussia Dortmund', '14/15', '33', '16', '7', '1/1', '4', '0', '0', '2', '9', '2715', '5'], ['Borussia Dortmund', '13/14', '32', '13', '4', '-/-', '1', '0', '0', '12', '11', '1889', '3'], ['AS St.-Etienne', '12/13', '36', '19', '0', '1/1', '2', '0', '0', '1', '-', '3136', '0']]], ['Robert Lewandowski', ['235', '160', '38', '16/17', '21', '0', '1', '30', '47', '18456', '27'], [['FC Bayern München', '17/18', '8', '9', '0', '3/3', '0', '0', '0', '-', '1', '694', '1'], ['FC Bayern München', '16/17', '33', '30', '6', '5/5', '5', '0', '0', '2', '3', '2776', '9'], ['FC Bayern München', '15/16', '32', '30', '3', '2/2', '2', '0', '0', '3', '3', '2654', '5'], ['FC Bayern München', '14/15', '31', '17', '6', '1/1', '0', '0', '0', '3', '11', '2482', '5'], ['Borussia Dortmund', '13/14', '33', '20', '7', '4/4', '4', '0', '0', '2', '6', '2801', '4'], ['Borussia Dortmund', '12/13', '31', '24', '5', '1/2', '2', '0', '1', '2', '1', '2595', '2'], ['Borussia Dortmund', '11/12', '34', '22', '9', '-/-', '4', '0', '0', '-', '13', '2865', '1'], ['Borussia Dortmund', '10/11', '33', '8', '2', '-/-', '4', '0', '0', '18', '9', '1589', '0']]], [..., [...], [[...], [...], [...]]]]
所以一个列表,其中有更多的列表(每个玩家一个列表)。你知道吗
我要保存到要正确打开的文件中的列表与此类似(jsut中包含更多玩家):
[['Pierre-Emerick Aubameyang', ['172', '114', '19', '9/13', '14', '0', '0', '19', '35', '13702', '22'], [['Borussia Dortmund', '17/18', '8', '10', '1', '2/3', '0', '0', '0', '-', '1', '714', '2'], ['Borussia Dortmund', '16/17', '32', '31', '2', '2/4', '3', '0', '0', '1', '5', '2780', '4'], ['Borussia Dortmund', '15/16', '31', '25', '5', '3/4', '4', '0', '0', '3', '9', '2468', '8'], ['Borussia Dortmund', '14/15', '33', '16', '7', '1/1', '4', '0', '0', '2', '9', '2715', '5'], ['Borussia Dortmund', '13/14', '32', '13', '4', '-/-', '1', '0', '0', '12', '11', '1889', '3'], ['AS St.-Etienne', '12/13', '36', '19', '0', '1/1', '2', '0', '0', '1', '-', '3136', '0']]], ['Robert Lewandowski', ['235', '160', '38', '16/17', '21', '0', '1', '30', '47', '18456', '27'], [['FC Bayern München', '17/18', '8', '9', '0', '3/3', '0', '0', '0', '-', '1', '694', '1'], ['FC Bayern München', '16/17', '33', '30', '6', '5/5', '5', '0', '0', '2', '3', '2776', '9'], ['FC Bayern München', '15/16', '32', '30', '3', '2/2', '2', '0', '0', '3', '3', '2654', '5'], ['FC Bayern München', '14/15', '31', '17', '6', '1/1', '0', '0', '0', '3', '11', '2482', '5'], ['Borussia Dortmund', '13/14', '33', '20', '7', '4/4', '4', '0', '0', '2', '6', '2801', '4'], ['Borussia Dortmund', '12/13', '31', '24', '5', '1/2', '2', '0', '1', '2', '1', '2595', '2'], ['Borussia Dortmund', '11/12', '34', '22', '9', '-/-', '4', '0', '0', '-', '13', '2865', '1'], ['Borussia Dortmund', '10/11', '33', '8', '2', '-/-', '4', '0', '0', '18', '9', '1589', '0']]], ['Martin Harnik', ['312', '102', '6', '3/5', '35', '3', '1', '56', '84', '23110', '17'], [['Hannover 96', '17/18', '8', '5', '0', '-/-', '1', '0', '0', '-', '4', '692', '1'], ['Hannover 96', '16/17', '30', '17', '2', '3/4', '4', '0', '0', '5', '12', '2320', '7'], ['VfB Stuttgart', '15/16', '19', '2', '0', '-/-', '2', '0', '0', '8', '5', '1000', '0'], ['VfB Stuttgart', '14/15', '28', '9', '3', '-/-', '1', '1', '1', '2', '11', '2236', '3'], ['VfB Stuttgart', '13/14', '30', '10', '0', '0/1', '6', '0', '0', '7', '9', '2031', '4'], ['VfB Stuttgart', '12/13', '30', '6', '0', '-/-', '6', '2', '0', '1', '-', '2500', '1'], ['VfB Stuttgart', '11/12', '34', '17', '1', '-/-', '4', '0', '0', '1', '12', '2768', '1'], ['VfB Stuttgart', '10/11', '32', '8', '0', '-/-', '7', '0', '0', '15', '5', '1877', '0'], ['Fortuna Düsseldorf', '09/10', '30', '13', '0', '-/-', '3', '0', '0', '1', '9', '2571', '0'], ['SV Werder Bremen', '08/09', '8', '0', '0', '-/-', '0', '0', '0', '6', '-', '318', '0'], ['SV Werder Bremen II', '08/09', '8', '1', '0', '-/-', '1', '0', '0', '-', '3', '704', '0'], ['SV Werder Bremen', '07/08', '9', '1', '0', '-/-', '0', '0', '0', '6', '2', '298', '0'], ['SV Werder Bremen II', '07/08', '12', '3', '0', '-/-', '0', '0', '0', '-', '3', '1038', '0'], ['SV Werder Bremen II', '06/07', '21', '8', '0', '-/-', '0', '0', '0', '4', '6', '1596', '0'], ['SV Werder Bremen II', '05/06', '13', '2', '0', '-/-', '0', '0', '0', '-', '3', '1161', '0']]], ['Mark Uth', ['152', '76', '12', '5/5', '15', '0', '0', '34', '55', '10458', '5'], [['TSG 1899 Hoffenheim', '17/18', '7', '5', '0', '-/-', '0', '0', '0', '1', '2', '533', '1'], ['TSG 1899 Hoffenheim', '16/17', '22', '7', '3', '-/-', '4', '0', '0', '10', '8', '1155', '1'], ['TSG 1899 Hoffenheim II', '16/17', '1', '1', '0', '-/-', '0', '0', '0', '-', '1', '58', '1'], ['TSG 1899 Hoffenheim', '15/16', '25', '8', '1', '-/-', '2', '0', '0', '9', '8', '1405', '2'], ['SC Heerenveen', '14/15', '32', '15', '8', '3/3', '6', '0', '0', '-', '15', '2664', '0'], ['1. FC Köln', '11/12', '-', '0', '0', '-/-', '0', '0', '0', '-', '-', '-', '0'], ['1. FC Köln II', '11/12', '15', '9', '0', '-/-', '3', '0', '0', '2', '2', '1179', '0'], ['1. FC Köln', '10/11', '-', '0', '0', '-/-', '0', '0', '0', '-', '-', '-', '0'], ['1. FC Köln II', '10/11', '23', '7', '0', '1/1', '0', '0', '0', '8', '5', '1473', '0'], ['1. FC Köln', '09/10', '24', '24', '0', '1/1', '0', '0', '0', '1', '14', '1938', '0'], ['1. FC Köln II', '09/10', '3', '0', '0', '-/-', '0', '0', '0', '3', '-', '53', '0'], ['SCB Viktoria Köln 1994', '06/07', '-', '0', '0', '-/-', '0', '0', '0', '-', '-', '-', '0']]]]
谢谢你们的帮助,伙计们!你知道吗
来自德国的问候
我找到了解决问题的方法:
with open('filename.csv', 'r', newline='') as file:
reader = csv.reader(file, delimiter=",", quotechar='|')
for row in reader:
for i in row:
part1 = i.replace("[","").split(",", 1)
name = part1[0].replace("'","")
part2 = part1[1].split("],", 1)
part3 = part2[1].split("],")
player_games = []
for ii in part3:
player_games.append(ii.replace("]", "").replace("'", "").split(","))
total_player = [name, zweite[0].replace("'", "").split(",")]
total_player.append(player_games)
liste.append(total_player)
这个很好用,但我认为有一个更好的。。。。你知道吗
首先,
list[ list[ str, list[str], list[ list[str] ] ] ]
在语义上是一种非常糟糕的数据存储格式。现在您可能知道数据的每一部分是什么,但您可能应该将内部列表转换为一些更具语义的容器,例如collections.namedtuple
或甚至dict
s。此外,每个播放器的第二个元素只是第三个元素的直接相加,因此可以避免将其存储在文件中以节省磁盘空间。我建议使用list[ collections.OrderedDict{ str: collections.OrderedDict{ str: collections.namedtuple(str, int, ...) } } ]
“s1”-“s12”是整数,表示每个季节列表的最后11个数字,因为其中一个当前被表示为“-/-”,我将其拆分为2。我不知道它们代表哪种状态,你应该使用更有意义的名称,比如“进球”、“比赛”等。例如,皮埃尔·埃默里克·奥巴梅扬的17/18赛季将是
Stats(team='Borussia Dortmund', s1=8, s2=10, s3=1, s4=2, s5=3, s6=0, s7=0, s8=0, s9=None, s10=1, s11=714, s12=2)
季节(即‘17/18’)不会存储在这个元组中,因为它将是保存这个元组的字典的键。你知道吗考虑到'-'的特殊情况,要将字符串解析为整数,我们需要一个函数:
如果你不喜欢用
None
而不是“-”,你可以把最后一行换成return value
,但是我发现用None
更适合Pythonic。稍后还需要修改filter
第一个参数。你知道吗一旦我们设置好所有这些,并使用如下数据示例:
我们可以解析原始数据并将其存储在这样一个文件中:
要重新加载数据,我们可以执行以下操作:
请看一下代码,如果您不理解任何部分,请给出注释,以便我进一步解释。你知道吗
编辑
要操作数据,您可以执行以下操作:
1)计算职业生涯统计数据并在表格中显示:
stats
是collections.OrderedDict
,因此我们将其值传递给map()
函数,该函数提取所需的stat(由.
访问,因为它是collections.namedtuple
)。这将为每个季节生成一个包含所需统计信息的列表,然后filter()
删除None
元素并sum()
将其添加。这样我们就避免了像您这样存储计算出的值。你知道吗2)列出球员职业生涯中参加过的球队:
我们像以前一样提取带有“map()”和“lambda”的团队,将其转换为一个集合以删除重复项,并通过“,”将它们连接起来以获得逗号分隔的字符串。你知道吗
3)打印全部数据:
相关问题 更多 >
编程相关推荐