我正在创建一个星座,其中我有一个不同质量的文件和4-5个句子,每个质量都有不同的陈述。质量用空行分隔。我想将它们保存到一个名为quality的列表中,其中quality包含获得第一个质量的句子,qualities1包含关于第二个质量的句子,依此类推。
我的代码:
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)不幸的是,上面只印着“"..。有人知道为什么吗?谢谢!
发布于 2013-07-25 21:07:42
我很惊讶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-25 21:10:40
看起来你的代码可以简化为:
class Horoscope:
def __init__(self, filename):
with open(filename) as fin:
self.qualities = [line.strip() for line in fin if '/' in line]https://stackoverflow.com/questions/17858879
复制相似问题