我正在创建一个星座,我有一个不同质量的文件和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)
不幸的是,打印的所有内容都是“[]”......有谁知道为什么?谢谢!
答案 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]