从文本中剪切特定的行并将它们放入另一个文件中



我有一个包含行的文本文件。我想剪掉列表中编号的行,并把它们放到另一个文件中。

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

如果你不想在内存中保留所有行,这里有一个想法:

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

文档链接:

  • itertools.count
  • zip

EDIT:如果您可以立即读取整个文件(并希望返回行列表),则可以使用readlines()来获取所有行列表,但对我来说它没有意义,因此我将执行上面显示的操作。但是,您可以这样做:

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方法。

使用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
   .....:         
['2n']
['4n']
['6n']
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
   .....:         
['1n']
['7n']
['9n']

相关内容

  • 没有找到相关文章

最新更新