如何在python中替换文件中的特定值

时间:2014-03-04 13:57:56

标签: python python-3.x

我试图用一个值替换零。到目前为止,这是我的代码,但接下来我该怎么办?

g = open("January.txt", "r+")
for i in range(3):
        dat_month = g.readline()

Month: January
Item: Lawn
Total square metres purchased:
0
monthly value = 0

3 个答案:

答案 0 :(得分:0)

dat_month = dat_month.replace("0", "45678")

要写入您执行的文件:

with open("Outfile.txt", "wt") as outfile:

然后

outfile.write(dat_month)

答案 1 :(得分:0)

可以这样做 - 但这不是通常的方法,当然也不是文本文件的正确方法。

执行此操作的正确方法是编写另一个文件,其中包含要更新的信息,然后将新文件重命名为旧文件。这是使用文本文件执行此操作的唯一理智方式,因为字段的信息大小(以字节为单位)是可变的。

至于你“将200个字节写入磁盘而不是单个字节”的改变,改变你的价值,不要让那个愚弄你:在操作系统级别,所有文件访问都必须在块,通常是几千字节长(在特殊情况下,和调整的文件系统,它可能是几百字节)。无论如何,在用户空间程序中,在Python等高级语言中,你永远不会触发少于几百字节的磁盘写入。

现在,代码:

import os
my_number = <number you want to place in the line you want to rewrite>
with open("January.txt", "r") as in_file, open("newfile.txt", "w") as out_file:

    for line in in_file:
        if line.strip() == "0":
             out_file.write(str(my_number) + "\n")
        else:
             out_file.write(line)

os.unlink("January.txt")
os.rename("newfile.txt", "January.txt")

所以 - 这是一般的想法 - 当然,你不应该用所有以这种方式硬编码的值编写代码(即在程序代码中检查和写入的值是固定的,文件名也是如此)。

对于with语句 - 它是一种特殊的语言结构,非常适合于在块中操作文件和操作,就像在这种情况下一样 - 但它不是需要

分开编程,你必须记住的概念是这样的: 当您使用可以编辑文本文件,电子表格和图像的应用程序时,您作为用户可能会有一个印象,在您完成并保存您的工作后,更新< strong>评论到同一个文件。在绝大多数用例中,不是发生的事情:应用程序在内部使用类似我上面提到的模式 - 完全新的文件写入磁盘并删除或重命名旧的。少数例外可能是简单的数据库应用程序,它可以在更新时替换文件本身内的固定宽度字段。现代数据库当然不会这样做,而是将最新的更新信息附加到文件的末尾。 PDF文件是另一种在创建时不能完全替换每种更新的文件:但在这种情况下,更新的信息写在文件的末尾,即使更新是在页面中进行的在渲染文档的开头。

答案 2 :(得分:0)

试试这个:

import fileinput
import itertools
import sys
with fileinput.input('January.txt', inplace=True) as file:
    beginning = tuple(itertools.islice(file, 3))
    sys.stdout.writelines(beginning)
    sys.stdout.write(next(file).replace('0', 'a value'))
    sys.stdout.write(next(file).replace('0', 'a value'))
    sys.stdout.writelines(file)