循环生成字典:如何逐行写入文件避免覆盖并保存为表格形式?
逐行写入字典到文件及保存为表格文件的解决方案
一、逐行写入字典到文本文件(避免覆盖)
你的当前代码问题在于没有执行实际的写入操作,仅构造了元组但未调用write方法。以下是两种可行的修正方案:
方案1:循环内追加写入(适合小数据量)
import json for i in ...: # 替换为你的循环迭代对象 # 生成modified_hosts字典的业务逻辑 modified_hosts = {'date': '2023-12-07', 'hostname': 'abc', 'present_value': 3, 'updated_value': 49} # 以追加模式打开文件,写入JSON字符串并换行 with open("/Users/myfile.txt", 'a', encoding='utf-8') as f: f.write(json.dumps(modified_hosts) + '\n')
方案2:循环外打开文件(更高效,适合大数据量)
减少重复打开/关闭文件的IO操作,提升效率:
import json # 先打开文件,再循环写入 with open("/Users/myfile.txt", 'a', encoding='utf-8') as f: for i in ...: # 替换为你的循环迭代对象 # 生成modified_hosts字典的业务逻辑 modified_hosts = {'date': '2023-12-07', 'hostname': 'abc', 'present_value': 3, 'updated_value': 49} f.write(json.dumps(modified_hosts) + '\n')
说明:'a'是追加模式,写入内容会自动追加到文件末尾,不会覆盖原有数据;json.dumps()将字典转为字符串,加'\n'保证每个字典单独占一行。
二、保存为表格形式文件(以CSV为例)
使用Python内置的csv模块,利用DictWriter可以直接将字典映射为表格行,操作简单且兼容性强:
方案1:新建表格文件(含表头)
import csv # 定义表头,需与字典的键完全对应 headers = ['date', 'hostname', 'present_value', 'updated_value'] # 'w'模式会创建新文件,newline=''避免Windows下出现空行 with open("/Users/my_table.csv", 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=headers) writer.writeheader() # 写入表头 for i in ...: # 替换为你的循环迭代对象 # 生成modified_hosts字典的业务逻辑 modified_hosts = {'date': '2023-12-07', 'hostname': 'abc', 'present_value': 3, 'updated_value': 49} writer.writerow(modified_hosts) # 写入单行数据
方案2:追加到已有表格文件
如果目标CSV已存在且包含表头,只需以追加模式打开,跳过表头写入:
import csv headers = ['date', 'hostname', 'present_value', 'updated_value'] # 'a'模式追加内容,无需再写表头 with open("/Users/my_table.csv", 'a', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=headers) for i in ...: # 替换为你的循环迭代对象 modified_hosts = {'date': '2023-12-07', 'hostname': 'abc', 'present_value': 3, 'updated_value': 49} writer.writerow(modified_hosts)
内容的提问来源于stack exchange,提问作者user12189187
相关产品推荐
相关产品推荐

