从文件创建列表

时间:2013-07-25 13:05:33

标签: python file list object

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

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

2 个答案:

答案 0 :(得分: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个值。)

答案 1 :(得分:0)

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

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