python - 为什么 Python 函数中的 file.flush() 在每个 csv.writerow() 之后调用时会跳行?
问题描述
我正在使用 csv.writerow() 从字典变量写入 csv 文件,并且在写入 csv 后我需要查看行,为此我以下列方式使用 file.flush():
import csv
def get_header(filetype):
headers = {
"memory": ["ts","kbmemfree","kbmemused","%memused","kbbuffers","kbcached","kbcommit","%commit","kbactive","kbinact","kbdirty",],
"cpu": ["ts","CPU","%usr","%nice","%sys","%iowait","%steal","%irq","%soft","%guest","%gnice","%idle",],
}
return headers[filetype]
json_objs = [{'cpu': {'%usr': 11.63, '%idle': 2384.38, '%guest': 0, 'ts': '07/17/2020 09:14:28', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 3.99, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731252, 'kbactive': 9110256, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:14:28', 'kbcached': 1038080, 'kbcommit': 0, 'kbinact': 659064}}, {'cpu': {'%usr': 12.59, '%idle': 2384.41, '%guest': 0, 'ts': '07/17/2020 09:14:40', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 3, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731308, 'kbactive': 9110224, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:14:40', 'kbcached': 1038084, 'kbcommit': 0, 'kbinact': 659064}}, {'cpu': {'%usr': 58.61, '%idle': 2325.4, '%guest': 0, 'ts': '07/17/2020 09:14:52', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 15.99, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8750984, 'kbactive': 9129868, '%commit': 0, '%memused': 8.86, 'ts': '07/17/2020 09:14:52', 'kbcached': 1038112, 'kbcommit': 0, 'kbinact': 659100}}, {'cpu': {'%usr': 43.03, '%idle': 2347.97, '%guest': 0, 'ts': '07/17/2020 09:15:04', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 9, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731484, 'kbactive': 9110512, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:15:04', 'kbcached': 1038092, 'kbcommit': 0, 'kbinact': 659064}}, {'cpu': {'%usr': 10.02, '%idle': 2386.98, '%guest': 0, 'ts': '07/17/2020 09:15:16', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 3, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731540, 'kbactive': 9110544, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:15:16', 'kbcached': 1038096, 'kbcommit': 0, 'kbinact': 659068}}, {'cpu': {'%usr': 11.38, '%idle': 2384.62, '%guest': 0, 'ts': '07/17/2020 09:15:28', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 4, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731600, 'kbactive': 9110624, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:15:28', 'kbcached': 1038100, 'kbcommit': 0, 'kbinact': 659068}}, {'cpu': {'%usr': 11.55, '%idle': 2385.45, '%guest': 0, 'ts': '07/17/2020 09:15:40', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 3, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731656, 'kbactive': 9110692, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:15:40', 'kbcached': 1038100, 'kbcommit': 0, 'kbinact': 659064}}, {'cpu': {'%usr': 62.99, '%idle': 2323, '%guest': 0, 'ts': '07/17/2020 09:15:52', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 14.01, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8754072, 'kbactive': 9132892, '%commit': 0, '%memused': 8.86, 'ts': '07/17/2020 09:15:52', 'kbcached': 1038132, 'kbcommit': 0, 'kbinact': 659100}}, {'cpu': {'%usr': 29.78, '%idle': 2364.22, '%guest': 0, 'ts': '07/17/2020 09:16:04', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 6, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731832, 'kbactive': 9110848, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:16:04', 'kbcached': 1038112, 'kbcommit': 0, 'kbinact': 659068}}, {'cpu': {'%usr': 28.47, '%idle': 2368.53, '%guest': 0, 'ts': '07/17/2020 09:16:16', '%irq': 0, 'CPU': 'all', '%steal': 0, '%gnice': 0, '%iowait': 0, '%sys': 3, '%soft': 0, '%nice': 0}, 'memory': {'kbdirty': 0, 'kbmemfree': 1, 'kbbuffers': 0, 'kbmemused': 8731892, 'kbactive': 9110920, '%commit': 0, '%memused': 8.84, 'ts': '07/17/2020 09:16:16', 'kbcached': 1038176, 'kbcommit': 0, 'kbinact': 659128}}]
mem_filename = "memory.csv"
cpu_filename = "cpu.csv"
mem_file_obj = open(mem_filename, "ab")
cpu_file_obj = open(cpu_filename, "ab")
mem_writer = csv.DictWriter(mem_file_obj, fieldnames=get_header("memory"))
cpu_writer = csv.DictWriter(cpu_file_obj, fieldnames=get_header("cpu"))
for row in json_objs:
cpu_writer.writerow(row["cpu"])
mem_writer.writerow(row["memory"])
mem_file_obj.flush()
cpu_file_obj.flush()
mem_file_obj.close()
cpu_file_obj.close()
为cpu编写的csv:
07/17/2020 09:16:16,all,28.47,0,3,0,0,0,0,0,0,2368.53
4
gnice,%idle
07/17/2020 09:14:28,all,11.63,0,3.99,0,0,0,0,0,0,2384.38
这段代码导致在写入时跳过数据。我不确定这是什么原因。有人可以帮忙吗?谢谢!
解决方案
推荐阅读
- sql - 带有左连接的 Oracle 更新
- java - 无法打印正确的对等消息 (Java)
- javascript - 使用 XMLHttpRequest 登录网站
- salt-stack - Saltstack 通过带有多个参数的 rest_cherrypy 通过 cmd.script 运行 bash 脚本
- python - 运行 Python 脚本,直到它匹配所需的结果
- c# - 调用 Shutdown() 时防止关闭事件触发
- sqlite - Xamarin Forms、Sqlite、EF Core 3、迁移和很多困惑
- discord.py - Discord.py 如何检查小部件是否被禁用
- java - Python 中是否有标准的通用 URI 处理程序?
- jquery - 我可以使用 Jquery 和变量插入刀片语法吗