如何解析张量格式的科学计数法文本文件并转换为普通浮点数值
问题原因
你原来的代码逻辑存在错误:多个if not判断只要满足其中一个条件就会直接写入原行,几乎没有实现冗余字符清理、格式转换的需求。
修复后完整代码
import os import re # 匹配科学计数法格式数字的正则规则 num_pattern = re.compile(r'\d+\.?\d*e[+-]\d+') for filename in os.listdir(): if not filename.endswith(".txt"): continue with open(filename, "r+", encoding="utf-8") as f: content = f.read() # 提取文件中所有符合规则的数字串 nums = num_pattern.findall(content) # 转换为十进制浮点数 float_nums = [float(num) for num in nums] # 清空原文件内容 f.truncate(0) f.seek(0) # 按每5个为一行格式化后写入,和示例输出格式对齐 for idx in range(0, len(float_nums), 5): line_nums = float_nums[idx:idx+5] formatted = [ f"{line_nums[0]:.2f}", f"{line_nums[1]:.2f}", f"{line_nums[2]:.2f}", f"{line_nums[3]:.2f}", f"{line_nums[4]:.5f}" ] f.write(" ".join(formatted) + "\n")
说明
- 正则提取数字的方案不需要专门处理
tensor、括号、device等冗余内容,自动跳过所有非目标字符,适配性更强 - 自动完成科学计数法到十进制小数的转换,你可以通过修改
f"{x:.nf}"中的n值调整不同位置数字的保留小数位数 - 自动按原数据的每行5个的结构输出,符合你的预期格式要求
内容的提问来源于stack exchange,提问作者reddevilsutd1
相关产品推荐
相关产品推荐

