2017-01-23 99 views
0

我想弄清楚一種方法來將歌曲數據存儲爲一個.txt中的列表。我正在使用的方法似乎是將值存儲在某處,但它不會將它們寫入文件。我也試圖插入一個循環,所以我可以繼續輸入「歌曲」,而不是隻有一個。我以前沒有用過課,我完全不知道該怎麼做。我可能會出錯,需要重新格式化部件?任何建議都會很棒。在一個類中循環並寫入一個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() 
+0

爲什麼你需要'writestring(F,字符串)''如果f.write(字符串)'在做同樣的事情嗎?順便說一句,不要'f.close()',因爲'with'會自動關閉它。 – DyZ

+0

用python3.5執行你的代碼,它會向文件寫入字符串。也許它只是沒有做你想要的東西? – Flickerlight

+0

似乎工作,但當我打開txt文件沒有什麼。 – alienmode

回答

1

夫婦的注意事項:

  • 因爲你只初始化類,一旦當你從你的代碼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() 

希望這有助於:)

+0

謝謝,你的解釋是非常有幫助的。 – alienmode