如何修改ECPy脚本以将所有椭圆曲线坐标运算结果完整保存至Save.txt文件
解决ECPy脚本仅保存单行点乘结果的问题
嘿,你的问题根源很明确:每次循环里都用open("Save.txt", "w")打开文件,w模式会直接清空文件原有内容,然后写入当前行的结果——所以循环结束后,文件里只会留下最后一次计算的结果(你说只保存第一行可能是个小误解,实际是每次覆盖,最终只剩最后一行)。
要让所有坐标的运算结果都保存下来,有两种简洁的修改方式,我都给你列出来:
方式一:一次性打开输出文件,循环内逐行写入
这种方式最直观,也能保证文件操作的安全性(用with语句自动管理文件关闭):
from ecpy.curves import Curve, Point # 提前创建曲线实例,不用每次循环都重复生成,省资源 cv = Curve.get_curve('secp256k1') C = 6 # 同时打开输入和输出文件,嵌套with语句会自动处理关闭 with open("Base.txt", "rt") as base_file, open("Save.txt", "w") as save_file: for line in base_file.read().splitlines(): # 解析每行的(x,y)坐标 x, y = map(lambda v: int(v, 16), line[1:-1].split(" , ")) A = Point(x, y, cv) # 执行点乘运算 B = A * C # 把结果写入文件,每次自动加换行 print(B, file=save_file)
关键修改点:
- 把曲线实例
cv和乘数C移到循环外,避免重复创建对象,提升运行效率 - 输出文件
Save.txt只打开一次,用w模式(如果需要保留原有文件内容,换成a模式即可),循环内每次追加当前结果,不会覆盖之前的内容
方式二:先收集所有结果,一次性写入文件
如果你的坐标数据量很大,这种方式更高效——减少频繁的文件IO操作,还能在写入前对结果做额外处理:
from ecpy.curves import Curve, Point cv = Curve.get_curve('secp256k1') C = 6 # 用列表存储所有运算结果 results = [] with open("Base.txt", "rt") as base_file: for line in base_file.read().splitlines(): x, y = map(lambda v: int(v, 16), line[1:-1].split(" , ")) A = Point(x, y, cv) B = A * C results.append(str(B)) # 一次性把所有结果写入文件 with open("Save.txt", "w") as save_file: save_file.write("\n".join(results))
两种方式都能完美解决你的问题,选哪个看你的实际需求就行~
内容的提问来源于stack exchange,提问作者Bashen
相关产品推荐
相关产品推荐

