从一个文件读到另一个文件缺少某些行

时间:2013-02-01 12:05:00

标签: python io text-files

我有一个文本文件(file1.txt),每行包含1个字符串。 我正在尝试读取文件并将某些行写入新文件。(file2.txt)

我的文本文件看起来像这样。

foo1
foo2
foo3
foo4
foo5
foo6

等。

例如,我想将foo1,foo2,foo4,foo6写入我的新文件并错过foo3和foo5。

foo1
foo2
foo4
foo6

我希望保留原始文件。

我的代码看起来像这样......

with open("file1.txt","r") as r:
    lines=r.read()
    lines =lines.replace("foo3","")
    lines = lines.replace("foo5","")

r.close()
with open("file2.txt","a") as w:
    w.write(lines)
w.close

问题是我最终得到了这个输出..

foo1
foo2

foo4

foo6

我认为这是因为我正在用“”取代foo 我如何摆脱白色空间?

TIA,

保罗。

2 个答案:

答案 0 :(得分:2)

最小的变化是通过将replace调用更改为:

来替换行分隔符
lines =lines.replace("foo3\n","")
lines = lines.replace("foo5\n","")

答案 1 :(得分:2)

假设排除是可变的:

def rwfile(infile, outfile, exceptions=[]):

    o = open(outfile, "w")

    for line in open(infile):
        if line.rstrip() not in exceptions:
            o.write(line)

    o.close()


rwfile("in", "out", ['foo3', 'foo5'])

在:

foo1
foo2
foo3
foo4
foo5
foo6
foo7
foo8
foo9

输出:

foo1
foo2
foo4
foo6
foo7
foo8
foo9

继OP的评论之后 - 这是一个使用谓词函数决定哪些行的版本 应该包括在内。

def rwfilep(infile, outfile, predicate=lambda x: True):

    o = open(outfile, "w")

    for line in open(infile):
        if predicate(line):
            o.write(line)

    o.close()

def ignore_some(line):
    """return True to include"""
    return line.rstrip() not in ['foo3', 'foo5']

def ignore_comments(line):
    """return True to include"""
    return not line.startswith("#")

rwfilep("in", "out2", ignore_some)

rwfilep("in", "out3", ignore_comments)