2013-07-25 140 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]