将行写入txt文件python

时间:2014-11-12 21:28:43

标签: python-3.x format lines

我有一个带有ID的txt文件,每个ID有34个数值。这些表示单个标签和17个坐标(x,y),表示每个ID的数字照片上的几何地标。

输入是这种格式的txt文件:
ID1 x1 y1
ID1 x2 y2
ID1 x3 y3
ID1 x4 y4
.....
ID1 x17 y17
ID2 x1 y1
ID2 x2 y2
.....
ID2 x17 y17
等等....

我需要输出文件如下:
ID1 x1 y1 x2 y2 x3 y3 x4 y4 ........ x17 y17
ID2 x1 y1 x2 y2 x3 y3 ........... x17 y17

我只是将输入文件的列放入列表中,因此我有一个ID列表(str),xs(str)列表和ys(str)列表。

for i in range(0, len(x), 17):
    coord = '\t'.join([x[i+j] + '\t' + y[i+j] for j in range(16)])
    OutputFile.write(ID[i] + "\t" + coord)  

但是,我的输出txt文件如下所示:
ID1 x1 y1
x2 y2
x3 y3
x4 y4
ID2 x1 y1
x2 y2
x3 y3
x4 y4

那么,我怎样才能在同一条线上写下所有坐标?我使用的是Python 3.4.0,我的所有数据都是str类型。

谢谢

2 个答案:

答案 0 :(得分:0)

这可能是你想要的:

with open('output.txt', 'w') as fo:
    with open('input.txt', 'r') as fi:
        for i, line in enumerate(fi.readlines()):
            print(line.strip(), end=' ', file=fo)
            if not (i+1) % 17:
                print(file=fo)

它只输出没有行结尾的行,但是然后添加一行到每个第17行结束。你会在每一行的末尾得到一个尾随空格。如果你真的不想这样,你可以列出输入行,然后重新加入它们:

with open('output.txt', 'w') as fo:
    with open('input.txt', 'r') as fi:
        lines = []
        for i, line in enumerate(fi.readlines()):
            lines.append(line.strip())
            if not (i+1) % 17:
                print(' '.join(lines))
                lines = []

答案 1 :(得分:0)

我无法在Python 3.3上重现您的结果。请注意,如果x,y中的值是整数,则字符串添加将不起作用,因此请确保它们不是\n - 终止字符串。例如,以下内容最接近您的代码,似乎可以执行您想要的操作:

n, nf = 2, 4
x = [str(i) for i in range(n * nf)]
y = [str(i*2) for i in range(n * nf)]
ID = [str(10*i) for i in range(nf)]
OutputFile = open('output2.txt', 'w')
nx = len(x)
for i in range(0, len(x), nf):
    OutputFile.write(ID[i//nf] + "\t" + x[i] + "\t" + y[i] + "\t" +  x[i+1] + "\t" + y[i+1] + "\t" + x[i+2] + "\t" + y[i+2] + "\t" + x[i+3] + "\t" + y[i+3] + "\n")
OutputFile.close()

和更多Pythonic:

n, nf = 2, 4
x = [str(i) for i in range(n * nf)]
y = [str(i*2) for i in range(n * nf)]
ID = [str(1001*i) for i in range(nf)]
OutputFile = open('output3.txt', 'w')
for i in range(0, len(x), nf):
    line = '\t'.join([x[i+j] + '\t' + y[i+j] for j in range(nf)])
    OutputFile.write(ID[i//nf] + '\t' + line + '\n')
OutputFile.close()

也有效。您可能需要共享一些数据才能在此方面取得更多进展。

相关问题