1

私はPythonにかなり慣れていません。基本的に、数値の 2D 配列を入力ファイルに挿入して、新しい出力ファイルを作成しようとしています。

入力データは次のようにフォーマットされます。

!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 に答える