如何在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
相关产品推荐
相关产品推荐

