如何将Python终端中函数的输出导出到文件?
解决Python计算圆周率结果写入文件的问题
方法1:修改main函数返回结果字符串
如果你的main函数原本是直接用print输出圆周率,改成让它返回计算得到的圆周率字符串,就能直接传给write方法。
示例代码:
def calcPi(): # 你的圆周率生成器实现 q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 while True: if 4 * q + r - t < n * t: yield n q, r, t, k, n, l = 10*q, 10*(r-n*t), t, k, (10*(3*q+r))//t - 10*n, l else: q, r, t, k, n, l = q*k, (2*q+r)*l, t*l, k+1, (q*(7*k+2)+r*l)//(t*l), l+2 def main(): # 生成指定位数的圆周率字符串(示例为前100位) pi_digits = [] for i, digit in enumerate(calcPi()): pi_digits.append(str(digit)) if i == 0: pi_digits.insert(0, ".") if i >= 100: break pi_str = "".join(pi_digits).replace(".", "3.", 1) return pi_str # 返回字符串而非直接打印 # 写入文件 with open("piStorage.txt", "w") as fp: fp.write(main())
方法2:捕获main函数的终端输出(无需修改原有main)
如果不想改动main的打印逻辑,用io.StringIO临时重定向标准输出,捕获print的内容:
import io import sys def calcPi(): # 你的圆周率生成器实现 q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 while True: if 4 * q + r - t < n * t: yield n q, r, t, k, n, l = 10*q, 10*(r-n*t), t, k, (10*(3*q+r))//t - 10*n, l else: q, r, t, k, n, l = q*k, (2*q+r)*l, t*l, k+1, (q*(7*k+2)+r*l)//(t*l), l+2 def main(): # 原有输出逻辑,直接打印圆周率 print("3.", end="") count = 0 for digit in calcPi(): print(digit, end="") count +=1 if count >= 100: break # 捕获输出内容 output_buffer = io.StringIO() sys.stdout = output_buffer main() sys.stdout = sys.__stdout__ # 恢复终端输出 # 写入文件 with open("piStorage.txt", "w") as fp: fp.write(output_buffer.getvalue())
方法3:命令行重定向输出(无需修改代码)
直接在运行脚本时用命令行重定向,把终端输出直接写入文件:
python your_script.py > piStorage.txt
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

