2013-07-25 183 views
0

我正在創建一個占星術,我有一個不同質量的文件和4-5個句子,每個質量都有不同的陳述。質量是用空行分隔的。我想將它們保存到一個名爲qualities的列表中,其中素質[0]包含管理第一個質量的句子,素質[1]包含關於第二個質量的句子等等。從文件創建列表

我的代碼:

class Horoscope: 

    def __init__(self, filename): 
     self.qualities = list() 
     file = open(filename, 'rU') 
     i = 0 
     for line in file: 
      row= line.strip().split('/') 
      if len(row) >= 2: 
       self.qualities[0+i] = row 
      else: 
       i += 1 
     file.close() FILENAME= 'horoscope.txt' 

horoscope= Horoscope(FILENAME) 

print(horoscope.qualities) 

Unfortunally,所有印是 「[]」 ...有誰知道爲什麼嗎?謝謝!

+1

我覺得你的程序應該產生一個錯誤,因爲你試圖訪問索引甚至不存在,或者可能是你的'if'條件是從來沒有' TRUE'。 –

+0

發佈文本文件,以便我們可以修復您的「if」條件。 –

回答

1

我很驚訝self.qualities[i]沒有引發IndexError。這表明len(row)從不是>= 2。但是,如果是這樣,你應該使用append代替:

class Horoscope: 
    def __init__(self, filename): 
     self.qualities = list() 
     with open(filename, 'rU') as f: 
      for line in f: 
       row = line.strip().split('/') 
       if len(row) >= 2: 
        self.qualities.append(row) 

FILENAME= 'horoscope.txt' 
horoscope= Horoscope(FILENAME) 
print(horoscope.qualities) 

注意,這不復制的原密碼邏輯。它追加了len(row) >= 2的每一行。你原來的代碼做了一些更復雜的事情,有時候覆蓋在同一個索引處,有時會推進索引。你真的想要嗎?如果是這樣,你想在索引簡單進階的位置列出什麼? None?必須在每個索引處放置一些值...(例如,第二個和第五個索引不能包含值,長度爲5的列表必須有5個值)。

+0

我的意圖是將文本文件中的每一行> = 2保存到第一個索引,然後當語句不真實而不是前進索引並再次保存每行> = 2時。 – user2618146

0

它看起來很像你的代碼可以簡化爲:

class Horoscope: 
    def __init__(self, filename): 
     with open(filename) as fin: 
      self.qualities = [line.strip() for line in fin if '/' in line]