Python Socket接收Arduino文件:如何避免写入空文件?
解决Arduino数据接收时生成空文件的问题
你完全找对了问题根源!当前代码里with open语句一执行就会创建空文件——哪怕后续循环里根本没接收到任何有效数据,空文件已经被生成了。要避免这个问题,核心思路就是延迟文件创建操作,直到我们确定接收到了有效数据。
这里给你两种实用的修改方案,根据你的需求选择就行:
方案1:边接收边写入(适合大文件/实时场景)
这个方案保留原有的“接收一块写一块”逻辑,但只在第一次收到有效数据时才打开文件:
file_opened = False output_file = None try: while True: t = conn.recv(20) print(t) # 没有数据就退出循环 if not t: break # 第一次收到有效数据时,才创建文件 if not file_opened: output_file = open('sensData.txt', 'wb') file_opened = True # 写入数据 output_file.write(t) finally: # 确保文件和连接都被正确关闭 if file_opened: output_file.close() print("数据文件已保存并关闭") s.close()
方案2:先缓存再写入(适合小数据量场景)
如果传感器数据量不大,可以先把所有收到的数据缓存起来,确认有数据后再一次性写入文件,逻辑更简洁:
received_data = b'' while True: t = conn.recv(20) print(t) if not t: break received_data += t # 只有当接收到有效数据时,才创建并写入文件 if received_data: with open('sensData.txt', 'wb') as f: f.write(received_data) print("数据已成功写入sensData.txt") else: print("未接收到任何有效数据,不会创建空文件") s.close()
两种方案都能彻底避免空文件问题:第一种不会在没数据时创建文件,第二种只有缓存到有效数据后才会触发文件写入操作。
内容的提问来源于stack exchange,提问作者notsolowki
相关产品推荐
相关产品推荐

