循环打印

Clo*_*ife 0 python printing for-loop

我有以下文件我试图操纵.

 1  2 -3 5  10  8.2
 5  8  5 4  0   6
 4  3  2 3 -2   15
 -3 4  0 2  4   2.33
 2  1  1 1  2.5 0
 0  2  6 0  8   5
Run Code Online (Sandbox Code Playgroud)

该文件只包含数字.

我正在尝试编写一个程序来相互减去行并将结果打印到文件中.我的程序在下面,dtest.txt是输入文件的名称.该计划的名称是make_distance.py.

from math import *

posnfile = open("dtest.txt","r")
posn = posnfile.readlines()
posnfile.close()

for i in range (len(posn)-1):
    for j in range (0,1):
        if (j == 0):
            Xp = float(posn[i].split()[0])
            Yp = float(posn[i].split()[1])
            Zp = float(posn[i].split()[2])

            Xc = float(posn[i+1].split()[0])
            Yc = float(posn[i+1].split()[1])
            Zc = float(posn[i+1].split()[2])
        else:
            Xp = float(posn[i].split()[3*j+1])
            Yp = float(posn[i].split()[3*j+2])
            Zp = float(posn[i].split()[3*j+3])

            Xc = float(posn[i+1].split()[3*j+1])
            Yc = float(posn[i+1].split()[3*j+2])
            Zc = float(posn[i+1].split()[3*j+3])

        Px = fabs(Xc-Xp)
        Py = fabs(Yc-Yp)
        Pz = fabs(Zc-Zp)
        print Px,Py,Pz
Run Code Online (Sandbox Code Playgroud)

程序正在正确计算值,但是当我尝试调用程序来编写输出文件时,

mpipython make_distance.py > distance.dat
Run Code Online (Sandbox Code Playgroud)

当输出文件(distance.dat)应该包含6时,它只包含3列.如何告诉程序将要打印的列移动到每个步骤j = 0,1,....

对于j = 0,程序应输出到前3列,对于j = 1,程序应输出到第3列(3,4,5),依此类推.

最后,len函数给出了输入文件中的行数,但是,什么函数给出了文件中的列数?

谢谢.

And*_*ark 5

将a附加,print语句的末尾并且它不会打印换行符,然后当您退出for循环时添加一个额外print的行以移动到下一行:

for j in range (0,1):
    ...

    print Px,Py,Pz,
print
Run Code Online (Sandbox Code Playgroud)

假设所有行具有相同的列数,您可以通过使用获得列数len(row.split()).

此外,你肯定可以缩短你的代码,我不确定目的j是什么,但以下内容应该等同于你现在正在做的事情:

    for j in range (0,1):
        Xp, Yp, Zp = map(float, posn[i].split()[3*j:3*j+3])
        Xc, Yc, Zc = map(float, posn[i+1].split()[3*j:3*j+3])
        ...
Run Code Online (Sandbox Code Playgroud)