Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类中循环并写入txt文件_Python - Fatal编程技术网

Python 在类中循环并写入txt文件

Python 在类中循环并写入txt文件,python,Python,我正试图找到一种将歌曲数据存储为.txt文件列表的方法。我使用的方法似乎是将值存储在某个地方,但不是将它们写入文件。我还尝试在其中插入一个循环,这样我就可以继续输入“歌曲”,而不是只输入一首。我以前没上过课,我不太明白怎么做。我可能做错了,需要重新格式化部件?任何建议都会很棒 class Song: def __init__(self,song,chart,member): self.song = song self.chart = chart

我正试图找到一种将歌曲数据存储为.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()
几点注意:

  • 由于在代码
    d=input(songdata)
    中向用户请求信息时,您只初始化了一次类,因此
    input
    中的提示在第一次之后将始终显示相同的内容
  • 没有向文件写入任何内容的原因可能是因为用户对
    d=…
    的响应始终为空。您在初始化类时请求了歌曲信息(您只做了一次),但从未将其写入文件(而是编写了
    f.write(string)
    ,其中
    string=“”+d
  • 正如回复中提到的,当您可以调用文件描述符
    write()
    方法时,您实际上不需要特定的函数来写入文件
我在下面重新编写了一些代码(写入文件部分)。我假设您希望用户能够通过输入键序列
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()

希望这有帮助:)

如果
f.write(string)
也在做同样的事情,为什么需要
writestring(f,string)
呢?顺便说一句,不要
f.close()
,因为
with
会自动关闭它。使用python3.5执行代码时,它会将字符串写入文件。也许它只是不做你想做的事?似乎可以工作,但当我打开txt文件时,那里什么都没有。谢谢你,你的解释非常有用。