python - 创建 csv 文件,其中每一行是一个列表中的一些嵌套列表
问题描述
我有体育比赛列表:
table = [['Volleyball', ' Europe', 'European Championships'],
['Today 17:00', 'Moldova - Cyprus', '2.00', '1.72'],
['Handball', ' Slovenia', '1. NLB Liga'],
['Today 17:00', 'Krka - Slovenj Gradec', '2.05', '1.98'],
['American Football', ' USA', 'NCAA'],
['Today 17:00', 'Marshall - Eastern Kentucky', '1.90', '1.90'],
['Today 20:00', 'Army - Middle Tennessee St', '2.01', '1.99'],
['Tomorrow 20:00', 'West Virginia - Florida State', '2.50', '1.50'],
['Soccer', ' World', 'Club Friendly'],
['Today 17:00', 'UE Sants (Esp) - CE Europa (Esp)', '1.84', '1.88'],
['Today 17:00', 'Spain - France', '1.20', '2.80'],
['Tennis', ' USA', 'ATP US Open'],
['Today 17:30', 'Berrettini M. - Ruud C.', '1.81', '2.02']]
列是:
sport country competition date match odd_1 odd_2
前 3 列:[sport, country, competition]
总是在一个嵌套列表中,前面是一个或多个列列表[date, match, odd_1, odd_2]
我想创建 csv,但我不知道如何将每个 [date matchodd_1odd_2] 数据与其特定的 [sport country Competition] 相关联
我创建了这段代码:
with open(filename.csv, 'a', encoding='utf_8_sig') as csv_file:
w = csv.writer(csv_file, lineterminator='\n')
header =
w.writerow(header)
for row in table:
w.writerow(row)
解决方案
您迭代列表,如果迭代的元素有 3 个部分,则设置"sport, country, competition"
字段 - 如果它有 4 个元素,则使用数据写入行,在最后一个 "sport, country, competition"
部分之前:
table = [['Volleyball', ' Europe', 'European Championships'],
['Today 17:00', 'Moldova - Cyprus', '2.00', '1.72'],
['Handball', ' Slovenia', '1. NLB Liga'],
['Today 17:00', 'Krka - Slovenj Gradec', '2.05', '1.98'],
['American Football', ' USA', 'NCAA'],
['Today 17:00', 'Marshall - Eastern Kentucky', '1.90', '1.90'],
['Today 20:00', 'Army - Middle Tennessee St', '2.01', '1.99'],
['Tomorrow 20:00', 'West Virginia - Florida State', '2.50', '1.50'],
['Soccer', ' World', 'Club Friendly'],
['Today 17:00', 'UE Sants (Esp) - CE Europa (Esp)', '1.84', '1.88'],
['Today 17:00', 'Spain - France', '1.20', '2.80'],
['Tennis', ' USA', 'ATP US Open'],
['Today 17:30', 'Berrettini M. - Ruud C.', '1.81', '2.02']]
import csv
with open("file.csv", "w", newline="") as f:
writer = csv.writer(f)
# write header
writer.writerow( "sport country competition date match odd_1 odd_2".split())
# write data
for inner_list in table:
if len(inner_list) == 3:
# decompose for clarity sake, could as well just store it in some
# other list: remember_me = inner_list
sport, country, competition = inner_list
else:
# and do writerow( remember_me + inner_list) here
writer.writerow([sport, country, competition] + inner_list)
with open("file.csv") as f:
print(f.read())
输出:
sport,country,competition,date,match,odd_1,odd_2
Volleyball, Europe,European Championships,Today 17:00,Moldova - Cyprus,2.00,1.72
Handball, Slovenia,1. NLB Liga,Today 17:00,Krka - Slovenj Gradec,2.05,1.98
American Football, USA,NCAA,Today 17:00,Marshall - Eastern Kentucky,1.90,1.90
American Football, USA,NCAA,Today 20:00,Army - Middle Tennessee St,2.01,1.99
American Football, USA,NCAA,Tomorrow 20:00,West Virginia - Florida State,2.50,1.50
Soccer, World,Club Friendly,Today 17:00,UE Sants (Esp) - CE Europa (Esp),1.84,1.88
Soccer, World,Club Friendly,Today 17:00,Spain - France,1.20,2.80
Tennis, USA,ATP US Open,Today 17:30,Berrettini M. - Ruud C.,1.81,2.02
你可能应该扔一些str.strip()
来清理你的数据......
推荐阅读
- gcc - GCC:仅检测非内联函数
- c - 蛇与自我和苹果的碰撞
- opencl - 我们如何知道opencl中计算单元的位大小
- php - 使用 socket.io 为 laravel echo 发出事件
- java - ListView 项目长按监听器抛出空指针异常
- google-analytics - Google Analytics 4 Data API (v1alpha):有没有办法在 runReport 中使用细分?
- apache-kafka - 如何在 KSQLDB 聚合函数中设置 [ignoreNulls] 以不忽略空值
- tomcat - 为什么 STS 运行方式... > 在服务器上运行自动生成 tomcat 服务器模块?
- hibernate - 多对多关系删除操作面临的问题
- python - Bin 时间列并在每个 bin 中对多个列进行分组