0

我意识到已经要求在文本文件中查找和替换,但我不确定如何将其应用于我的情况。

基本上,这在程序的早期进行:

while True:
    ingredient = input("what is the name of the ingredient? ")
    if ingredient == "finished":
        break
    quant = input("what is the quantity of the ingredient? "))
    unit = input("what  is the unit for the quantity? ")
    f = open(name+".txt", "a")
    f.write("\ningredient: "+ingredient+quant+unit)

稍后,我需要阅读文本文件。但是,我需要将数字(quant)替换为用户输入的数字乘以不同的数字。目前我有这个,但我知道这一切都是错误的。

file2 = open(recipe+".txt", "r")
file3 = open(recipe+".txt.tmp", "w")
for line in file2:
 file3.write(line.replace(numbers,numbers * serve))
print(file3)
os.remove(recipe+".txt.tmp")

line.replace 部分目前是伪代码,因为我不知道该放什么......对不起,如果这是一个新手问题,但我真的坚持这一点。感谢收听!

我。

4

2 回答 2

2

在编写文件时,请帮自己一个忙,并在不同条目之间放置某种分隔符:

f.write("\t".join(["\ningredient: ", ingredient, quant, unit]))

然后,当您再次打开文件时,您可以使用该分隔符拆分每行的字符串并在第三个条目上进行操作(这是数字所在的quant位置):

lines = file2.readlines()
for line in lines[1:]: # To skip the first empty line in the file
    line = line.split("\t")
    line[2] = str(float(line[2]) * int(serve))
    file3.write("\t".join(line))

注意有更好的方法来存储 python 数据(如picklesCSV),但这应该适用于您当前的实现,而无需太多修改。

于 2013-06-06T19:03:30.243 回答
0

你可以尝试这样的事情:

    from tempfile import mkstemp
    from shutil import move
    from os import remove, close

    def replace(file_path, pattern, subst):
     #Create temp file
    fh, abs_path = mkstemp()
    old_file = open(file_path)
     for line in old_file:
     new_file.write(line.replace(pattern, subst))
     #close temp file
     new_file.close()
     close(fh)
     old_file.close()
     #Remove original file
     remove(file_path)
      #Move new file
     move(abs_path, file_path)

看看这个:在 Python 中搜索和替换文件中的一行

于 2013-06-06T18:59:34.080 回答