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
中的文本。希望我的解释是正确的。

编辑文本文件的规则是,您应该读取一个文件,在新文件中写入原始行或修改行,然后用原始名称重命名新文件。你可以看看或者谢谢你!我将在未来的课程中坚持这一原则。我感谢你的帮助!非常感谢你!你让我克服了我的障碍,我对你的答案做了一些修改,以使函数按我所希望的方式工作!我真的很感谢你的帮助,我刚刚启动了我的堆栈溢出帐户,所以我很高兴这里有像你这样了不起的人!