2012-04-03 122 views
0

我一直在尋找周圍的分配類的數據,並沒有運氣找到任何回答我的問題。閱讀文本並在Python

基本上我有以下數據的文件:

Title - 19 
Artist - Adele 
Year released - 2008 
1 - Daydreamer, 3:41, 1 
2 - Best for Last, 4:19, 5 
3 - Chasing Pavements, 3:31, 7 
4 - Cold Shoulder, 3:12, 3 

Title - El Camino 
Artist - The Black Keys 
Year released - 2011 
1 - Lonely Boy, 3:13, 1 
2 - Run Right Back, 3:17, 10 

EOF 

我知道如何創建類,以及如何將對象分配到類和值到該對象,但我只是準備把我的頭髮撕掉,我應該如何處理文本。從文本中,我需要爲相冊創建一個標題,併爲其分配相冊的信息。除此之外還有更多的事情需要完成,還有更多的線路需要閱讀,而我只是不知道從哪裏開始。我通過google發現了兩個「album.py」文件,而且我一直無法對如何將解決方案應用於我的案例做出正面或反面的評論。

是的,這是一所學校分配。我做了一些挖掘,發現了一些相關的東西,但我只是不理解它。我對編程一般都很陌生,而且我已經取得了進步,但是這似乎太過頭了。

我知道我會這樣減少採用分體式(\ n \ n)和一系列逐漸變小名單的工作清單,但我想不惜一切代價避免這種方法。

編輯:

目前,最好假設我什麼都不知道。雖然,回答下面的問題:我可以打開文件並閱讀它。如果它是一個一致的CSV格式的文件,我可以編寫代碼來處理所包含的數據,並創建一個使用該數據的類結構。現在我只是遇到了前三行和下面的數字。

2012年4月4日:

好吧,我有一些代碼,我已經離開對於這些評論,它的下面。在代碼

def getInput(): 
    global albums 
    raw = open("album.txt","r") 
    infile = raw 
    raw.close 
    text="" 
    line = infile.readline() 
    while (line != "EOF\n"): 
     text += line 
     line=infile.readline() 
    text=text.rstrip("\n\n") 
    albums=[str(n) for n in text.split("\n\n")] 
    return albums 


class Album(): 
    def __init__(self, title, artist, date): 
     self.title=title 
     self.artist=artist 
     self.date=date 
     self.track={} 

    def addSong(self, TrackID, title, time, ranking): 
     self.track+={self} 

    def getAlbumLength(self): 
     asdf=0 
    def getRanking(self): 
     asdf=0 

def labels(x): #establishes labels per item to be used for Album Classifier 
    title="" 
    artist="" 
    date="" 

    for i in range(0,len(albums),1): 
     sublist=[str(n) for n in albums[i].split("\n")] 
     RANDUMB=len(albums[i]) 
     title=sublist[0] 
     artist=sublist[1] 
     date=sublist[2] 

     for j in range(0,len(sublist),1):     
      song_info = [str(k) for k in sublist[3:].split("," and " - ")] 
      TrackID=song_info[0] 
      title=song_info[1] 
      time=song_info[2] 
      ranking=song_info[3] 

getInput() 
labels(albums) 

個人點評: 我試圖避免得到它進入名單,因爲我已經預見到這個問題。就功能而言,我必須使用每一個血腥的,因爲它在分配要求...我不高興,因爲我可能會繞過使用它們。代碼工作得足夠好,除了我試圖獲取歌曲信息的最後部分。我想將歌曲信息分成列表,這些列表嵌入到相冊信息列表中。就像:

[Album title, Artist, Date released,[01,Song,3:44,2],[02,Song,0:01,9]....] 

當前的代碼給我索引超出範圍錯誤截至目前......我使用python3。

TLDR:我的問題的實質也由此從試圖解決如何去啓動的解決方案如何採取列表中的項目,並將其轉換成嵌套的列表一個變化。

+3

也許你可以發佈你到目前爲止?究竟哪一部分你有麻煩?打開一個文件閱讀?如何讀取文件中的行?如何創建相冊類?如何爲類變量賦值? – fitzgeraldsteele 2012-04-03 01:47:50

+0

你爲什麼害怕在名單上分裂? '\ n \ n'是迄今爲止我可以看到的* only *分隔符。如果你不分裂兩條換行符,你將如何劃分一個對象的開始和另一個對象的結束? – mvanveen 2012-04-03 02:14:17

回答

0

如果你最終編輯你的問題包含的是什麼給你的麻煩了一些更具體的例子,我將編輯這個答案。但爲了解決您的一般問題,您需要採取一些步驟來實現您的目標。

  1. 就像你說的,你需要編寫一個反映你想從這些數據中獲得的結構的類。
  2. 您將需要通過線來分析此文件,可能行。所以你必須確定這個文件格式是否一致。如果是,那麼你需要確定:
    1. 什麼是每個之間的分隔符設置數據的,將被塑型爲一個類的實例?
    2. 每行的每個字段之間的分隔符是什麼?

當你遍歷每一行,你會知道你需要時,你會遇到一個空行,開始了新專輯的對象。

當你知道你正在開始一個新的專輯,你可以假設第一行是標題,第二個藝術家,第三年,等

對於這些線你會的還必須有如何將每個分割成你想要的數據的規則。在基本層面上,它可以是一組簡單的分割。在更高級的層次上,您可以爲每種類型的行定義正則表達式。

+0

@ jdi謝謝你,這就是我一直在尋找的。我不想添加太多的信息,因爲我沒有對我所知道的事情做出假設,因爲我可能是錯的。 我的問題正是我不知道如何分割數據。我假設它是通過 .split(「\ n \ n」)。我想我會在實際的標題/藝術家/年份之前刪除主要文本,但即使如此,我也不知道如何處理。我會提供我的代碼 我會告訴你我的代碼,但我到目前爲止所做的只是讀取文件,存儲數據並關閉文件。 – 2012-04-03 02:17:34

+0

@T_Poda:你不需要一次讀取整個數據。只需逐行循環,並隨時更改「狀態」。如果你打了一個空行,你就知道你需要製作一個新的。如果你最終發佈任何代碼,我會對此發表評論。 – jdi 2012-04-03 02:20:44