在学习使用python去读写csv文件时,发现有如下这两种方式
1.普通写入
import csv #引入csv
# 需要输出的数据组,'8_1'中[8]是工人工号,[1]是其所在工位,后面两数字是开始和结束时间
a=[['8_1', [0.0, 4.2]],
['6_2', [0.0, 4.4]],
['7_3', [0.0, 3.85]],
['9_4', [4.2, 8.7]],
['1_5', [4.4, 8.98]]
]
#需要成立的表头
head = ['工人工号', '所在工位', '效率', '用时', '生产线平衡率']
#与表头对应的数据
row = [[a[i][0][0], a[i][0][-1], 0.3, a[i][1][-1] - a[i][1][0],
'{:.2%}'.format(0.933)] for i in range(len(a))]
#写入内容
with open('D:/file.csv', 'w', newline= '') as w :
w_csv = csv.writer(w)
w_csv.writerow(head)
w_csv.writerows(row)
结果:
2.用字典的方式写入,能完全实现row里内容和head表头内容的一一对应。
import csv #引入csv
# 需要输出的数据组
a=[['8_1', [0.0, 4.2]],
['6_2', [0.0, 4.4]],
['7_3', [0.0, 3.85]],
['9_4', [4.2, 8.7]],
['1_5', [4.4, 8.98]]
]
#需要成立的表头
head = ['工人工号', '所在工位', '效率', '用时', '生产线平衡率']
#与表头对应的数据
row = [{'工人工号':a[i][0][0],'所在工位': a[i][0][-1], '效率':0.3, '用时':a[i][1][-1] - a[i][1][0],
'生产线平衡率':'{:.2%}'.format(0.933)} for i in range(len(a))]
#写入内容
with open('D:/file.csv', 'w', newline= '') as w :
w_csv = csv.DictWriter(w,head) #方法改变
w_csv.writeheader() #方法改变
w_csv.writerows(row)
结果如上,但风险更小,建议使用第二种。且要注意倒数第二第三代码段有变动。
当全数据要更新时,若想保留原数据,就要把倒数第4行中的'w'(写入模式)改成'a'(追加模式);若想在更新的时候覆盖原有数据,就无需更改。
如下:由
with open('D:/file.csv', 'w', newline= '') as w :
改成:
with open('D:/file.csv', 'a', newline= '') as w :
|