在类中循环并写入txt文件

2024-04-25 19:20:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试图找到一种方法,将songdata存储为.txt文件中的列表。我使用的方法似乎是将值存储在某个地方,但不是将它们写入文件。我还试图插入一个循环到它,这样我就可以继续输入“歌曲”,而不是只有一个。我以前没上过课,也不太懂怎么做。我可能做错了,需要重新格式化零件?任何建议都会很棒。你知道吗

class Song:
    def __init__(self,song,chart,member):
        self.song = song
        self.chart = chart
        self.member = member

    def __str__(self):
        return self.song + " topped the charts at " + str(self.chart)+ " band memebers include " + str(self.member)
songdata = Song(input("song"),input("chart spot"), input("bandemember"))

def readstring(f, line):
    string = line.strip('\r\n')
    return string

def writestring(f, string):
    f.write(string)


with open("string.txt", "a+", encoding="utf-8") as f:
    cont = "Y"
    while cont.upper() == "Y":
        d = input(songdata)
        if d != "q":
            string = " "+d
            writestring(f, string)
        else:
            print("saving.....")
            break

    f.seek(0)
    for line in f:
        print(readstring(f,line))
f.close()

Tags: 文件方法selftxtinputstringreturnsong
1条回答
网友
1楼 · 发布于 2024-04-25 19:20:31

注意事项:

  • 因为在代码d = input(songdata)中向用户请求信息时只初始化了一次类,input的提示在第一次之后总是显示相同的内容。你知道吗
  • 没有任何内容被写入文件的原因可能是用户对d=...的响应总是空的。初始化类时请求了歌曲信息(只做了一次),但从未将其写入文件(而是编写了f.write(string),其中string=" "+d
  • 正如在回复中提到的,当您可以调用file descriptorswrite()方法时,您实际上不需要特定的函数来写入文件。你知道吗

我在下面重新编写了您的一些代码(写入文件部分)。我假设您希望用户能够随时通过输入键序列q退出程序,并且已经相应地这样做了。我相信你可以用发电机做一些更漂亮的东西,但这与问题无关:

class Song:
    """
    song class
    """

    def __init__(self, song, chart, member):
        self.song = song
        self.chart = chart
        self.member = member

    def __str__(self):
        return (self.song
                + " topped the charts at "
                + str(self.chart)
                + " band memebers include "
                + str(self.member)
                + '\n'
               )

def main():

    with open("string.txt", "a+", encoding="utf-8") as fd:

        #Loop until user requests to stop
        #Key sequence to stop = 'q'
        while(1):

            #Get user input
            prompt = ">>\t"
            in_song = input("song" + prompt)
            if (in_song == 'q'):
                break

            in_chart_spot = input("chart spot" + prompt)
            if (in_chart_spot == 'q'):
                break

            in_band_mem = input("band members" + prompt)
            if (in_band_mem == 'q'):
                break

            #Create the class
            song_data = Song(in_song, in_chart_spot, in_band_mem)

            #Write out the data
            fd.write(str(song_data))

if __name__ == '__main__':
    main()

希望这有帮助:)

相关问题 更多 >