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