python-3.x - 导出为 CSV,它会覆盖或附加每个新行的标题和行
问题描述
这是一个包含多个值的大数据库,我有一个脚本,它逐行读取并创建一个新行,其中包含用于导出到 CSV 文件的数据。新行被传递给内部创建 CSV 文件的函数,然后尝试编写新行,结果并不完全符合我的需要。
我尝试了几种方法并检查了论坛上的其他问题,仍然发现不同的输出但不是预期的。我试过这些:
1-
with open(csv_file, 'wb') as csvfile:
或with open(csv_file, 'ab') as csvfile:
结果:TypeError: a bytes-like object is required, not 'str'
2-
with open(csv_file, 'a') as csvfile:
结果
IMSI,MSISDN,
VAL01,VAL02
IMSI,MSISDN,
VAL03,VAL04
IMSI,MSISDN,
VAL05,VAL06
IMSI,MSISDN,
VAL07,VAL08
3-
with open(csv_file, 'w') as csvfile:
IMSI,MSISDN,
VAL07,VAL08
结果 3 是合乎逻辑的,文件正在覆盖,并且它不会在下一行附加后续值,将行保持在新行之前
ifwith
语句分开writer.writerow(val)
我打破它的感觉并返回ValueError: I/O operation on closed file.
新行传球的功能是
def escribir(val):
print(type(val))
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
writer.writerow(val)
我检查了传递值的类型,在 CSV 上写入是正确的
我希望在 CSV 文件中写入传递给函数的每个不同的新行,不重复标题,不换行。
解决方案
您是否def escribir(val)
为同一个输出 csv 文件多次调用?如果是这种情况,则writer.writeheader()
从此功能中删除。编写一个单独的函数/代码片段,仅写入一次标题信息。
推荐阅读
- html - 两个 div 与 flex 并排
- excel - Visual Basic for Applications 中的“For 循环”错误
- oracle - Oracle Reports:当我在表单中调用报表时,图像没有出现
- python - 仅冻结 torch.nn.Embedding 对象的某些行
- java - 正则表达式 - 用开始和结束引号替换带引号的字符串
- c++ - lua_isstring 迭代表中表的问题
- postgresql - 为什么 Ansible 剧本没有正确设置 cron 作业?
- angular - Angular:可以在开发服务器上使用 PWA(ng serve)吗?
- java - 我如何使用代理模式在java中添加两个数字
- jquery - 无法在 FullCalendar 中使用 GoToDate