如何替换不在当前循环 Python 中的文本文件中的一行

How do I replace a line in a text file thats not in the current loop Python

我是编程新手,如果有更简单的方法,请告诉我。有一个名为 Duelist.txt 的文本文件,其中包含以下内容:

-------------------------------------------------
Duelist: Seto Kaiba
Server: Amazon
Username: Kaibaman
Password: Blue-Eyes White Dragon
-------------------------------------------------
Duelist: Mokuba Kaiba
Server: Amazon
Username: Kaibaboy
Password: KaibabestBro
------------------------------------------------

changeUsername(login,duelistID,exists,server): 函数在 loginexistsTRUE 时运行。如果他们想更改用户名,它会提示用户输入新用户名,然后函数 supposed 更改当前位置后 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(login,duelistID,exists,server) loginexists 为 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(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:
                    serverSearch[index]=(serverSearch[index]).replace(duelistID,newUsername)

            with open("Duelist.txt","w") as file:
                file.write('\n'.join(serverSearch))

            if choice == "n":
                pass

            print("Exiting Edit Server Username...")

changeUsername(True,"Kaibaman",True,"Amazon")

我个人更喜欢将整个文本文件加载到列表中,进行必要的更改并将整个列表写回到文件中。

我想我需要重新表述我的问题,但 Pervez 能够根据我的需要进行必要的更改。我只是添加了一些调整以得出以下结果:

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...")

在这种情况下,如果函数可以匹配 duelistIDsearch 行,该函数将仅替换 Duelist.txt 中的文本。希望我解释正确。