当前位置: 首页 > 知识库问答 >
问题:

覆盖txt文件中的特定行

金慈
2023-03-14

我仍然是python的新手,我已经尝试过这种方式覆盖txt文件上的一行

'''

答案 =输入(“俄/秒/升/米:”)

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文件上的所有文本行,无论我想做什么,当我选择R时,它会写入txt文件的第一行,当我选择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个答案

何烨华
2023-03-14

您的第一种方法已经接近解决方案,但是您没有选择第一行或第三行,您只是创建了一个包含1的列表(< code>lines = [1])。您首先需要打开文件。然后,您可以使用< code>file.readlines返回一个列表,其中每一行都作为一个单独的字符串,而不是使用< code>file.read返回整个文件作为一个字符串。然后,给一个特定的行赋一个新值,再次打开同一个文件,但现在是在写模式下,使用< code>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)

我会让你自己修改其他答案的代码。请注意,如果你把上面的内容放在一个函数中,接受一个数字(你要覆盖的行)和一个字符串(答案),你可以保存很多行代码。

你肯定想知道为什么我在代码中添加了行[0]=…。嗯,我们从1开始计数,但Python从0开始计数!你称之为第一行,对Python来说是0st,你称之为第二行,对Python来说是1st。依此类推。

下面是第二种方法的一些说明:file.seek查找文件中由您传递给它的数字指定的字节,而不是行。file.truncate调整文件大小。它不会覆盖文件。

 类似资料:
  • 问题内容: 我编写的代码应该覆盖所选文本文件的内容,但是会附加它。我到底在做什么错? 编辑 我尝试制作一个新的temp.txt文件并将新内容写入其中,删除此文本文件并将temp.txt重命名为该文件。事实是,删除总是不成功的。我认为我不必为此更改用户权限吗? 另外,程序的一部分列出了该目录中的所有文件,因此我猜它们正在被程序使用,因此无法删除。但是为什么不覆盖呢? 解决了 我最大的“ D’oh”时

  • 我正在Java写一个程序来更新文本文档上的数据。更新由按钮(JButton)触发。 特别是,我需要区分文档中的3行: 第一个描述了一个名为“total”的浮点值 第二个描述了一个名为“fail”的浮点值 第三个描述了一个称为“rate”的双值 在程序执行期间,我希望读取文档的3行并将其分配给变量;按下按钮后,相应的变量必须覆盖文档中的值。 为了实现这一点,我的理由如下: 我声明了3个私有变量(总数

  • 我正在从文本文件中读取预订系统的座位数据,并将其写入ArrayList中。一个行将被放入一个可变的fileline中。文件行是从每个“,”中拆分出来的,并放入名为Components的数组中。然后将组件放入对象中。 txt文件示例 然后进入一个if语句,检查座位是否合适,如果合适,我想将false更改为true,并将乘客名添加为null,但只在合适的座位上。我想知道是否有任何方法可以覆盖文本文件中

  • 问题内容: with open(“games.txt”, “w”) as text_file: print(driver.current_url) text_file.write(driver.current_url + “\n”) 我现在正在使用此代码,但是当它写入文件时,它将覆盖旧内容。我如何能简单地添加它而不删除已经存在的内容。 问题答案: 而不是使用(附加)功能模式:

  • 问题内容: 我正在使用Python csv模块读取csv文件,每一行都像这样: 然后,我将row [0]转换为Unix时间,但是我想用刚为csv文件的每一行找到的Unix时间替换datetime 因此,我使用unixtime值创建了列表Y,但是接下来我该如何进行替换,以产生如下所示的输出: 问题答案: 每个只是一个。您可以就地对其进行修改,也可以使用要替换的值创建一个新列表: 如果要将其写回文件,

  • 问题内容: 覆盖文件中特定行的最佳方法是什么?我基本上想在文件中搜索字符串’@parsethis’,然后用其他东西覆盖该行的其余部分。 问题答案: 如果文件不是太大,最好的方法可能是使用file()将文件读入行数组,在行数组中搜索您的字符串并编辑该行,然后将implode()返回一起将其fwrite()返回文件。