Python3.6将多列表转为CSV:实现列表对应列展示的方法
解决Python将多列表转为CSV列的问题
你遇到的问题核心是把列表按行写入了CSV,但实际需要按列对应每行的元素——也就是每一行应该是number[i]、session[i]、stage[i]的组合,而不是把整个列表作为一行。
问题分析
你当前的代码用writerow(number)会把整个number列表作为CSV的一行,导致三个列表横向排列成三行,但我们需要的是纵向的三列,每一行对应三个列表的同位置元素。
解决方案:使用zip() + writerows()
zip()函数可以把多个可迭代对象的对应元素打包成元组,正好满足我们的需求:把number、session、stage的第i个元素组合成一行。然后用writerows()(注意是复数,带s)一次性写入所有行。
修改后的代码如下:
import csv import sys number = ['H. R. 43', 'H. Con. Res. 22', 'S. 11'] session = ['1st Session', '1st Session', '2nd Session'] stage = ['Introduced in House', 'Engrossed in House', 'Referred in Senate'] def main(anything): with open('BILLS.csv', 'w', newline='') as csvfile: # 加上newline=''避免Windows下空行 writer = csv.writer(csvfile) writer.writerow(['Number', 'Session', 'Stage']) # 写入表头 # 用zip打包三个列表的对应元素,writerows写入所有行 writer.writerows(zip(number, session, stage)) if __name__ == '__main__': main(sys.argv)
关键说明
zip(number, session, stage):会生成类似('H. R. 43', '1st Session', 'Introduced in House')这样的元组,每个元组对应CSV的一行。writerows():接收一个可迭代的行对象(比如zip返回的元组序列),一次性写入所有行,比循环调用writerow()更高效。newline='':这是Python csv模块的推荐写法,避免在Windows系统下生成的CSV出现多余的空行。
生成的CSV内容示例
Number,Session,Stage H. R. 43,1st Session,Introduced in House H. Con. Res. 22,1st Session,Engrossed in House S. 11,2nd Session,Referred in Senate
这样就完美实现了你要的效果:三个列表分别对应Number、Session、Stage三列,元素纵向展示。
内容的提问来源于stack exchange,提问作者user9387863
相关产品推荐
相关产品推荐

