如何逐行读取文件生成指定格式的JSON字符串?
解决方法:生成指定格式的JSON字符串
没问题,我来帮你搞定这个需求!你的思路已经走对了,只差最后一步把提取到的数据转换成标准的JSON字符串。这里有两种靠谱的实现方式,我优先推荐用Python内置的json模块,它能帮你避开手动拼接字符串时容易踩的坑,比如引号转义、特殊字符处理这些问题。
方法一:使用json模块(推荐)
这种方式更规范,兼容性更强,代码可读性也更高。同时我会帮你优化文件读取的逻辑,用with语句自动管理文件生命周期,不用手动调用close():
import json # with语句会自动处理文件的打开和关闭,避免异常导致文件未关闭 with open('hosts.txt') as f: # 直接遍历文件对象,比readline循环更简洁高效 for line in f: # 去掉每行首尾的空白(包括换行符),避免空行或多余字符干扰 cleaned_line = line.strip() # 跳过空行 if not cleaned_line: continue # 拆分机器名和IP,一次性解包到变量中,比两次split更高效 machine, ip = cleaned_line.split("=") # 构建符合要求的字典结构 json_data = { "test": "hello world.", "server": machine, "ip": ip, "reason": "data" } # 将字典转换为标准JSON字符串并打印 print(json.dumps(json_data))
方法二:字符串格式化(简单场景可用)
如果你的机器名和IP里绝对不会包含双引号,也可以直接用字符串格式化快速生成结果,但这种方法遇到特殊字符时容易出错,只推荐在简单场景下使用:
with open('hosts.txt') as f: for line in f: cleaned_line = line.strip() if not cleaned_line: continue machine, ip = cleaned_line.split("=") # 注意f-string里需要写两个大括号,单个大括号是占位符标识 json_str = f'{{"test":"hello world.","server":"{machine}","ip":"{ip}","reason":"data"}}' print(json_str)
重要注意点
你原来的代码里有个小坑:readline()读取的行末尾会带有换行符\n,直接split后ip变量会包含这个换行符,导致生成的JSON里IP值不符合预期。所以一定要用strip()去掉首尾的空白字符。
内容的提问来源于stack exchange,提问作者flash
相关产品推荐
相关产品推荐

