覆盖 txt 文件中的特定行

overwriting a specific line in a txt file

我对python还是个新手,我试过用这种方法覆盖txt文件中的一行

'''

回答=输入("R/S/L/M:")

if answer == "R":
    print ("Racer")
    f=open('character.txt', 'w+')
    with open("character.txt") as file_in:
        lines = [1]
        for line in file_in:
            lines.append(line)
    amount=int(input("please enter the amount"))            
    f.write(answer )
    f.write("" + "-" + str(amount) + '\n\n')
    f.write("" + '\n')
    f.close()
elif answer == "S":
    print ("Sage")      
    f=open('character.txt', 'w+')
    with open("character.txt") as file_in:
        lines = [3]
        for line in file_in:
            lines.append(line)
    amount=int(input("please enter the amount"))            
    f.write(answer )
    f.write("" + "-" + str(amount) + '\n\n')
    f.write("" + '\n')
    f.close()

'''

它会替换 txt 文件中的所有文本行 我想做的是当我 select R 它写入 txt 文件的第一行,当我 select S 它写入 txt 文件的第三行

我已经试过了

'''

  if answer == "R":
    print ("Racer")
    f=open('character.txt', 'w+')
    with open("character.txt", "r+") as myfile:
        data = myfile.read()
        myfile.seek(0)
        amount=int(input("please enter the amount"))
        newData1=(answer + "" + "-" + str(amount) + '\n\n')
        myfile.write(newData1)
        myfile.truncate()
    f.close()

 elif answer == "S":
    print ("Sage")       
    f=open('character.txt', 'w+')
    with open("character.txt", "r+") as myfile:
        data = myfile.read(4)
        myfile.seek(4)
        amount=int(input("please enter the amount"))
        newData2=(answer + "" + "-" + str(amount) + '\n\n')
        myfile.write(newData)
        myfile.truncate(4)
    f.close()

'''

谁能给我指出正确的方向

您的第一种方法已经接近解决方案,但您没有选择第 1 行或第 3 行,您只是创建一个包含 1 (lines = [1] 的列表。您首先需要打开文件。然后,您可以使用 file.readlines which returns 一个包含每一行的列表作为一个单独的字符串,而不是 file.read which returns 整个文件作为一个字符串。然后,您为一个特定的行分配一个新值,再次打开同一个文件,但现在处于写入模式,使用 file.writelines 将行列表写回文件,就是这样!

if answer == "R":
    print("Racer")
    with open("character.txt", "r") as f: # with automatically closes the file - no need to do so yourself
        lines = f.readlines()

    amount = input("please enter the amount") # no need to convert the amount to int first if you then convert it back  to string below       
    lines[0] = answer + "-" + amount
    with open("character.txt", "w") as f:
        f.writelines(lines)

我会让你自己调整代码以适应其他答案。请注意,如果您将上面的代码放在一个函数中,那么您可以节省很多行代码,它接受一个数字(您要覆盖的行)和一个字符串(答案)。

你肯定想知道为什么我把 lines[0] = ... 放在代码中。好吧,我们从 1 开始计数,但是 Python 从 0 开始计数!您所说的第一行是 Python 第 0 行,您所说的第二行是 Python 第 1 行。等等。

这里是第二种方法的一些注释:file.seek seeks to the byte in the file specified by the number you passed to it, not to the line. And file.truncate resizes the file. It does not overwrite 文件。