技术问询:接收客户端数据后无法实现JSON追加写入文件,写入功能失效
解决文件追加写入及JSON写入问题
我来帮你梳理下代码里的问题,以及对应的修复方案:
核心问题分析
- 文件打开模式错误:你用了
'w'模式打开文件,这个模式每次都会清空原有文件内容并重新写入,自然会覆盖之前的数据。要实现追加,必须用'a'(追加模式)。 - JSON写入方式不当:你已经把接收的二进制数据解码成了UTF-8字符串,直接用
json.dump()会把这个字符串作为JSON值写入(比如原数据是"hello",写入后会变成"\"hello\""),这不是你想要的效果。如果接收的是JSON格式的数据,需要先解析成Python对象再写入;如果只是要保存原始文本,直接用write()即可。
修复方案
根据你的需求(保留历史数据、支持后续搜索和表格功能),分两种场景给出代码:
场景1:接收的是JSON格式数据(推荐用于结构化存储)
如果客户端发送的是完整的JSON对象/数组,比如{"id":1, "content":"test"},可以这样写:
import json while True: data = s.recv(1024).decode('utf-8') if data: try: # 将字符串解析为Python数据结构 parsed_data = json.loads(data) # 用追加模式打开文件,指定编码避免乱码 with open("data.txt", 'a', encoding='utf-8') as f: # 写入JSON数据 json.dump(parsed_data, f, ensure_ascii=False) # 每次写入后加换行,方便后续逐行读取解析 f.write('\n') except json.JSONDecodeError: print(f"警告:收到无效的JSON数据,已跳过:{data}")
场景2:接收的是普通文本数据
如果只是要保存原始文本,不需要JSON结构化,直接追加即可:
while True: data = s.recv(1024).decode('utf-8') if data: with open("data.txt", 'a', encoding='utf-8') as f: # 写入原始文本 f.write(data) # 每次追加后添加空格(按你的需求调整) f.write(' ')
额外注意事项
- 流式数据处理:网络传输是流式的,
recv(1024)可能只收到部分数据(比如一个大的JSON被拆成多次接收),这时候直接解析会报错。如果遇到这种情况,你需要先缓存数据,直到确认收到完整的数据包(比如约定用换行符分隔每条数据,或者发送数据前先传长度)。 - 编码显式指定:打开文件时加上
encoding='utf-8',避免不同操作系统下的默认编码差异导致乱码。
内容的提问来源于stack exchange,提问作者Earthwormben
相关产品推荐
相关产品推荐

