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

2024-06-26 02:50:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一个值来代替零。到目前为止,这是我的代码,但我下一步要做什么?你知道吗

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

Tags: 代码intxtforreadlinerangeopenitem
3条回答
dat_month = dat_month.replace("0", "45678")

要写入文件,请执行以下操作:

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

然后呢

outfile.write(dat_month)

试试这个:

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)

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

正确的方法是编写另一个文件,其中包含要更新的信息,然后将新文件重命名为旧文件。这是处理文本文件的唯一明智方法,因为字段的信息大小(以字节为单位)是可变的。你知道吗

至于“向磁盘写入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语句—它是语言的一种特殊构造,非常适合打开文件并在块中进行操作,就像在本例中—但它不是需要的。你知道吗

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

相关问题 更多 >