我有一个文本文件(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,
保罗。
答案 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)