首页 > 解决方案 > 为什么 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

这段代码导致在写入时跳过数据。我不确定这是什么原因。有人可以帮忙吗?谢谢!

标签: pythonjsoncsvflush

解决方案


推荐阅读