写入特定行的Python代码有时不起作用

时间:2015-11-29 20:07:36

标签: python file

我写了一些代码来写入文件中的特定行,但有时它会覆盖所有内容

def read_write_file(file1, text, line_no):
    lines = []
    with open(file1, 'r+') as f:
        for i, line in enumerate(f):
            if i == line_no:
                if line != text:
                    line = text
            lines.append(line)

    with open(file1, 'w') as f:
        for line in lines:
            f.write(line)

我试图写给willl的fie看起来像。

from flask import Flask

app = Flask(__name__)


if __name__=='__main__':
    app.run()

我想在app = Flask(名称)&之间添加文字。如果名称 =='主要':         app.run(),有时它会添加文本而不会覆盖任何内容,但有时当我运行它时,会删除app = Flask( name )之后的所有内容。

1 个答案:

答案 0 :(得分:1)

我建议写一个临时文件并执行shutil.move,你只需要在你要插入的行前面的行:

def read_write_file(file1, start, to_insrt):
    from tempfile import NamedTemporaryFile
    from shutil import move
    with open(file1) as f, NamedTemporaryFile("w",dir=".", delete=False) as tmp:
        for line in f:
            tmp.write(line)
            if line.rstrip() == start:
                tmp.write(to_insrt+"\n")
        move(tmp.name, file1)

演示:

In [4]: cat test.txt
from flask import Flask

app = Flask(__name__)


if __name__=='__main__':
    app.run()
In [5]: read_write_file("test.txt","app = Flask(__name__)","print('hello world')")

In [6]: cat test.txt
from flask import Flask

app = Flask(__name__)
print('hello world')


if __name__=='__main__':
    app.run()

在您自己的代码中,您使用'r+'进行阅读和写作,在您重新打开之前永远不会写,所以没有意义,除非您添加,否则您最终也会使用print('hello world')print('hello world')这样的行换行,即使这样你也可能会得到不正确的数据,特别是如果你正在编写python代码。此外,如果您使用枚举开始计算从1开始计算的行,则应将1设置为枚举的开头,否则您将因错误而退出。