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

这应该这样做:

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(只是因为我在写作时不确定是否应该有一个或两个参数):

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 回答
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 回答