0

我正在创建一个星座,其中我有一个具有不同质量的文件和 4-5 个句子,其中对每种质量都有不同的陈述。质量用空行分隔。我想将它们保存到一个名为 quality 的列表中,其中 quality[0] 包含有关第一个质量的句子,quality[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)

不幸的是,所有打印的都是“[]”......有人知道为什么吗?谢谢!

4

2 回答 2

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 个值。)

于 2013-07-25T13:07:41.637 回答
0

看起来您的代码几乎可以简化为:

class Horoscope:
    def __init__(self, filename):
        with open(filename) as fin:
            self.qualities = [line.strip() for line in fin if '/' in line]
于 2013-07-25T13:10:40.490 回答