-2

我有一个包含行的文本文件。我想剪切编号在列表中的行,并将它们放入另一个文件中。

例如,如果我有一个包含 的列表[1, 3, 67],那么我想将第 1 行、第 3 行和第 67 行放入一个新文件中,并将它们从原始文件中删除。在 Python 中最简单的方法是什么?

4

2 回答 2

2

如果您不想将所有行都保留在内存中,这是一个想法:

def lines(fname, numbers):
    numbers = sorted(numbers, reverse=True)
    with open(fname) as f:
        for n, line in enumerate(f, 1):
            if n == numbers[-1]:
                yield line
                numbers.pop()
                if not numbers:
                     break

文档链接:

编辑:如果您可以一次读取整个文件(并且想要返回行列表),您可以使用readlines()来获取所有行的列表,但对我来说这没有任何意义,所以我d 做我上面展示的。但是,您可以这样做:

def lines(fname, numbers):
    with open(fname) as f:
        lines = f.readlines()
        return [lines[i] for i in numbers]

如果您想要“自然”编号,请更改lines[i]为。lines[i+1]

Edit2:那么你仍然需要编写两个新文件:一个包含这些行,一个包含其余行。为此,open文件并使用文件对象的writelines方法。

于 2013-01-20T15:37:00.253 回答
0

使用itertools.islice()

例如,如果文件是:

1
2
3
4
5
6
7
8
9

代码:

In [107]: li=[2,4,6]  # this list should be sorted first
In [108]: with open("abc.txt") as f:
    prev=0
    for num in li:
        print list(islice(f,num-prev-1,num-prev))       
        prev=num
   .....:         
['2\n']
['4\n']
['6\n']

In [109]: li=[1,7,9]

In [110]: with open("abc.txt") as f:
    prev=0
    for num in li:
        print list(islice(f,num-prev-1,num-prev))  #print or do something else     
        prev=num
   .....:         
['1\n']
['7\n']
['9\n']
于 2013-01-20T16:41:28.660 回答