0

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

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

foo1
foo2
foo3
foo4
foo5
foo6

ETC..

例如,我想将 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,

保罗。

4

2 回答 2

2

最小的更改是通过将replace调用更改为以下内容来替换行分隔符:

lines =lines.replace("foo3\n","")
lines = lines.replace("foo5\n","")
于 2013-02-01T12:08:48.533 回答
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)
于 2013-02-01T12:23:28.753 回答