1

我对python相当陌生。基本上,我试图将一个二维数字数组插入到输入文件中以创建一个新的输出文件。

输入数据的格式如下:

!TITLE
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

真的,我只是想用一个 3x1 数组替换一个特定的列,比如:

print(newcol_3)

这给了我:

[[1111]
 [1111]
 [1111]]

我的代码:

Inp_ptr = file('inp_file.dat', 'r')
Inp_data = Inp_ptr.readlines()

firstline = 1
for i in range(firstline,firstline+2):
  old_inp[i-firstline] = array(Inp_data[i].split()[0:12])

new_inp = zeros([3,12])
for i in range(0,2):
  new_inp[i] = [old_inp[i,0], old_inp[i,1], float(newcol_3[i]), old_inp[i,3], ... old_inp[1,11]]

这给了我我的 3x12 阵列。要将其打印到我尝试过的文件中:

Out_ptr = file('out_file.dat', 'w')
Out_data = Inp_data

row0 = str(new_inp[0])
row1 = str(new_inp[1])
row2 = str(new_inp[2])

Out_data[firstline] = row0
Out_data[firstline+1] = row1
Out_data[firstline+2] = row2

for line in Out_data:
  Out_ptr.write(line)

这让我有点接近,但输入仍然以数组(和多行)的形式出现,所以输出看起来像:

!TITLE
[  0000      0000      1111      0000      0000      0000
   0000      0000      0000      0000      0000      0000][  0000      0000      1111      0000      0000     0000
   0000      0000      0000      0000      0000      0000][  0000      0000      1111      0000      0000     0000
   0000      0000      0000      0000      0000      0000]

我正在寻找的是:

!TITLE
0000 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000

我在这里很迷茫,我在网上搜索并尝试了''.join和\n %等的各种组合。我也确信有一种更简单的方法来创建新数据集(我理解for循环所以我坚持我所知道的)。但我愿意接受所有建议。谢谢!

4

2 回答 2

1

如果你的用例真的这么简单,你可以这样做:

with open('inputfile') as fin,open('outputfile','w') as fout:
    fout.write(next(fin))  #write first line directly to fout
    for line in fin:
        ll = line.split()
        ll[2] = '1111'
        fout.write(' '.join(ll)+'\n')
于 2012-11-30T15:36:57.867 回答
1

当你print列出一个列表时,你会得到代表它的括号。您实际上想要在文件中结束的是字符串,最好使用Out_ptr.write(''.join(line)).

于 2012-11-30T15:35:15.393 回答