0

次のようなファイルを読み取ろうとします

1 1 2 3 4 5 6 6 7\n 
2 3 4 5 2 3 4 7 8 2 3\n 
3 1 2 4 2 1 4 5 6 2

のようなファイルを書き換えたい

1 1
1 2
1 3
1 4
...
3 2

ただし、さまざまなサイズの行を保存する方法がわかりません。基本的なコードは以下ですが、dst[]の部分を変更する必要があります。

while 1:
        line = file1.readline()
    if not line:
        break
    src, tmp, dst[] = line.split(' ') 
    # rewrite part will be here

私を助けてください。前もって感謝します。

4

4 に答える 4

0
 while (1):
    line = file1.readline()
    if not line:
        break
    tokens = line.split();
    for (count, token) in enumerate(tokens,start=1):
        print str(tokens[0]) + " " + str(token)
于 2012-10-30T22:35:50.617 に答える
0

これはそれを行う必要があります:

In [1]: with open("data1.txt") as f:
   ...:     for line in f:
   ...:         spl=line.split()
   ...:         first,rest=spl[0],spl[1:]
   ...:         for x in rest:
   ...:             print first,x  # instead of printing write 
                                   # it to a file using 
                                   # write("{0} {1}\n".format(first,x)
   ...:             
   ...:             
1 1
1 2
1 3
1 4
1 5
...
...
3 6
3 2
于 2012-10-30T22:13:25.240 に答える
0

書きたい行は次のとおりです。

src, tmp, dst[] = line.split(' ') 

これを行う直接的な方法はありません。いくつかの言語 (Haskell など) では提供されていますが、Python では提供されていない、パターン マッチ代入と呼ばれるものを探しています。

同じ効果を得る最も簡単な方法は、明示的にすることです。

bits = line.split(' ')
src, tmp, dst = bits[0], bits[1], bits[2:]

本当に必要な場合は、引数を関数に渡すことで間接的にパターン マッチングを使用できます。

def doStuff(src, tmp, *dst):
  # do stuff

doStuff(*line.split(' '))
于 2012-10-30T22:14:11.930 に答える
0

を使用してitertools.product(私が書いたときに、1つまたは2つのパラメーターが意図されているかどうかわからなかったからです):

from itertools import product

with open('testing2.txt') as fin:
    for line in fin:
        items = line.split()
        first, rest = items[0], items[1:]
        for i, j in product(first, rest):
            print i, j
于 2012-10-30T22:15:41.893 に答える