Python 如何替换文本文件中不在当前循环中的行
我是编程新手,所以如果有更简单的方法,请告诉我。有一个名为Python 如何替换文本文件中不在当前循环中的行,python,iteration,readline,write,Python,Iteration,Readline,Write,我是编程新手,所以如果有更简单的方法,请告诉我。有一个名为Duelist.txt的文本文件,其中包含以下内容: ------------------------------------------------- Duelist: Seto Kaiba Server: Amazon Username: Kaibaman Password: Blue-Eyes White Dragon ------------------------------------------------- Duelist
Duelist.txt
的文本文件,其中包含以下内容:
-------------------------------------------------
Duelist: Seto Kaiba
Server: Amazon
Username: Kaibaman
Password: Blue-Eyes White Dragon
-------------------------------------------------
Duelist: Mokuba Kaiba
Server: Amazon
Username: Kaibaboy
Password: KaibabestBro
------------------------------------------------
def changeUsername(login,duelistID,exists,server):
index = 0
username = "Username: "
serverSearch = []
duel = "Duelist: " + duelistID
search = "Server: " + server
if login == True and exists ==True:
print("Would you like to change this username for " + server + "?")
print("Press \"y\" key for yes or press \"n\" key for no followed by the Enter key")
choice = input(f'{duelistID}:')
if choice == "y":
newUsername = input("Please enter new username: ")
username += newUsername
with open("Duelist.txt", 'r') as file:
content = file.readlines()
for line in content:
serverSearch.append(line.strip("\n"))
for index, line in enumerate(serverSearch):
if duelistID in line:
if search == serverSearch[index+1]:
serverSearch[index+2]=(serverSearch[index+2]).replace(serverSearch[index+2],username)
with open("Duelist.txt","w") as file:
file.write('\n'.join(serverSearch))
if choice == "n":
pass
print("Exiting Edit Server Username...")
如果登录
和存在
为真
,则此更改用户名(登录,duelistID,存在,服务器):
函数将运行。如果他们想更改用户名,它会提示用户输入新用户名,然后函数将在当前位置后的Duelist.txt
两行中更改用户名,但它不会
def changeUsername(login,duelistID,exists,server):
index = 0
username = "Username: "
serverSearch = []
duel = "Duelist: " + duelistID
search = "Server: " + server
if login == True and exists ==True:
print("Would you like to change this username for " + server + "?")
print("Press \"y\" key for yes or press \"n\" key for no followed by the Enter key")
choice = input(f'{duelistID}:')
if choice == "y":
newUsername = input("Please enter new username: ")
username += newUsername
with open("Duelist.txt", 'r') as file:
content = file.readlines()
for line in content:
serverSearch.append(line.strip("\n"))
with open("Duelist.txt", 'r+') as file:
for index, line in enumerate(serverSearch):
if duel in line:
if search == serverSearch[index+1]:
serverSearch[index+2] = username
file.write(line.replace(serverSearch[index+2], username))
if choice == "n":
pass
print("Exiting Edit Server Username...")
time.sleep(1)
这是用户在函数changeUsername(登录名、duelistID、exists、server)中的输入。
使用login
和作为True存在,duelistID
作为Mokuba-Kaiba存在,server
作为Amazon存在
Would you like to change this username for Amazon?
Press "y" key for yes or press "n" key for no followed by the Enter key
Mokuba Kaiba:y
Please enter new username: Mokuba
Exiting Edit Server Username...
用户输入后,我在Duelist.txt中获得以下内容
Duelist: Mokuba Kaiba---------------------------
Duelist: Seto Kaiba
Server: Amazon
Username: Kaibaman
Password: Blue-Eyes White Dragon
-------------------------------------------------
Duelist: Mokuba Kaiba
Server: Amazon
Username: Kaibaboy
Password: KaibabestBro
-------------------------------------------------
我一直在努力找出这个问题,并提出一个简单的解决方案,但我只是一个三流编码与四流代码。有人能帮助这个函数完成它应该做的事情吗?试试这个:
def changeUsername(登录名、duelistID、存在名、服务器名):
索引=0
用户名=“用户名:”
服务器搜索=[]
duel=“Duelist:”+duelistID
search=“服务器:”+服务器
如果login==True且exists==True:
打印(“是否要将此用户名更改为“+服务器+”?”)
打印(“按“y”键表示是,或按“n”键表示否,然后按Enter键”)
choice=输入(f'{duelistID}:')
如果选项==“y”:
newUsername=输入(“请输入新用户名:”)
用户名+=新用户名
打开(“Duelist.txt”,“r”)作为文件:
content=file.readlines()
对于内容中的行:
serverSearch.append(行.strip(“\n”))
对于索引,枚举(服务器搜索)中的行:
如果duelistID在第行中:
serverSearch[index]=(serverSearch[index])。替换(duelistID,newUsername)
打开(“Duelist.txt”、“w”)作为文件:
file.write('\n'.join(服务器搜索))
如果选项==“n”:
通过
打印(“正在退出编辑服务器用户名…”)
changeUsername(真“凯巴曼”,真“亚马逊”)
我个人更喜欢将整个文本文件加载到列表中,进行必要的更改,然后将整个列表写回文件。我想我需要重新表述我的问题,但Pervez能够根据我的需要进行必要的更改。我只是增加了一些调整,以得出以下结论:
-------------------------------------------------
Duelist: Seto Kaiba
Server: Amazon
Username: Kaibaman
Password: Blue-Eyes White Dragon
-------------------------------------------------
Duelist: Mokuba Kaiba
Server: Amazon
Username: Kaibaboy
Password: KaibabestBro
------------------------------------------------
def changeUsername(login,duelistID,exists,server):
index = 0
username = "Username: "
serverSearch = []
duel = "Duelist: " + duelistID
search = "Server: " + server
if login == True and exists ==True:
print("Would you like to change this username for " + server + "?")
print("Press \"y\" key for yes or press \"n\" key for no followed by the Enter key")
choice = input(f'{duelistID}:')
if choice == "y":
newUsername = input("Please enter new username: ")
username += newUsername
with open("Duelist.txt", 'r') as file:
content = file.readlines()
for line in content:
serverSearch.append(line.strip("\n"))
for index, line in enumerate(serverSearch):
if duelistID in line:
if search == serverSearch[index+1]:
serverSearch[index+2]=(serverSearch[index+2]).replace(serverSearch[index+2],username)
with open("Duelist.txt","w") as file:
file.write('\n'.join(serverSearch))
if choice == "n":
pass
print("Exiting Edit Server Username...")
在这种情况下,如果函数可以匹配duelistID
和search
行,则函数将仅替换Duelist.txt
中的文本。希望我的解释是正确的。编辑文本文件的规则是,您应该读取一个文件,在新文件中写入原始行或修改行,然后用原始名称重命名新文件。你可以看看或者谢谢你!我将在未来的课程中坚持这一原则。我感谢你的帮助!非常感谢你!你让我克服了我的障碍,我对你的答案做了一些修改,以使函数按我所希望的方式工作!我真的很感谢你的帮助,我刚刚启动了我的堆栈溢出帐户,所以我很高兴这里有像你这样了不起的人!