覆盖 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 文件。
我对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 文件。