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

如何在Python循环中记录所有EndToEnd数值并保存为.csv/.txt文件?

解决EndToEnd数值全记录问题及相关错误处理

核心问题修正

你代码里的EndToEnd计算和打印语句在while循环外部,只会在循环结束后执行一次,自然只能得到最终值。直接把这部分代码移到循环内部,就能每次循环都计算并输出当前的EndToEnd值:

while(D < n):
    print(D)
    print(F)
    G = ((Basepairs*D)+(3*F)) 
    # 读取指定行的轨迹数据
    df = pd.read_table('01_03_2023trajectoryoutput.dat', delimiter=' ', skiprows=range(0,G), nrows=1, header=None, usecols=[0,1,2])  
    # 从df中提取坐标值(需确保A、B、C/X、Y、Z的取值逻辑正确,示例如下)
    A, B, C = df.iloc[0, 0], df.iloc[0, 1], df.iloc[0, 2]
    # 计算当前循环的EndToEnd值
    EndToEnd = (((A-X)**2 + (B-Y)**2 + (C-Z)**2)**(1/2)) * 0.842
    # 打印当前值,加flush确保实时输出到文件
    print(EndToEnd, flush=True)

NaN错误处理

出现NaN通常是因为读取的数据为空或变量取值异常,可按以下方式处理:

  • 读取数据后先判断是否为空:添加if df.empty: continue跳过无效行
  • 对数据做缺失值清洗:df = df.dropna(),确保提取的坐标均为有效数值
  • 检查X、Y、Z变量的初始化逻辑,确认没有未赋值或赋值错误的情况

输出到文件的可靠方式

如果重定向命令无效,建议直接在代码中打开文件写入,避免缓冲问题:

# 循环前打开目标文件
with open('End-to-End-DNA-Distance.txt', 'w') as output_file:
    while(D < n):
        print(D)
        print(F)
        G = ((Basepairs*D)+(3*F)) 
        df = pd.read_table('01_03_2023trajectoryoutput.dat', delimiter=' ', skiprows=range(0,G), nrows=1, header=None, usecols=[0,1,2])  
        if df.empty:
            continue
        A, B, C = df.iloc[0, 0], df.iloc[0, 1], df.iloc[0, 2]
        EndToEnd = (((A-X)**2 + (B-Y)**2 + (C-Z)**2)**(1/2)) * 0.842
        # 写入文件
        output_file.write(f"{EndToEnd}\n")
        # 可选:同时打印到终端查看
        print(EndToEnd)

内容的提问来源于stack exchange,提问作者HeRaThVA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:48