首页 > 解决方案 > 如何替换不在当前循环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):函数运行 ifloginexistsare TRUE。如果他们想更改用户名,它会提示用户输入新的用户名,然后该函数应该在当前位置之后的两行中更改用户名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
-------------------------------------------------

我很难弄清楚这一点并提出一个简单的解决方案,但我只是一个拥有四流代码的三流编码器。任何人都可以帮助使这个功能做它应该做的事情吗?

标签: pythoniterationreadlinewrite

解决方案


尝试这个 :

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

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


推荐阅读