You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:40:28