文本文件如下所示:
helen:9,5,7
john:5,4,3
beta:9,9,9
我是python的新手,我该怎么分裂呢? 我不断收到属性错误:
AttributeError:' list'对象没有属性' split'
def readText(group):
snap = []
with open(group+'.txt','r') as text:
for line in text:
name = line.split(':')[0]
score = max(line.split(':')[1].split(',').split()[0])
snap.append([name,score])
export = sorted(snap, key=lambda x:x[0])
print ('Student highest score, in alphabetical order')
for L in export:
print (L[0]+':'+L[1])
if __name__ == '__main__':
scores = [0,0,0]
readText(group)
答案 0 :(得分:1)
split是str的一个函数,你可以在这里看到(搜索str.split) https://docs.python.org/2/library/stdtypes.html
第二行分割
score = max(line.split(':')[1].split(',').split()[0])
分割字符串	 9,5,7'进入列表[' 9',' 5',' 7']。再次调用它会产生你看到的错误。
您希望得分为第二次拆分中列表的最大值()。
另外,请确保考虑空白行所发生的情况。如果有空白行并且您致电
line.split(':')[1]
会有麻烦。
答案 1 :(得分:0)
split() #returns a list, so you can't call split().split()
score = max(line.split(':')[1].split(',').split()[0])
你可以在拆分前删除前面的
name = line.split(':')[0]
score = max( s[-(s.find(":")):].split(",") )
snap.append([name,score])
答案 2 :(得分:0)
您可以将for循环的内容更改为:
name, scores = line.split(':',2)
score = max(scores.split(','))
snap.append([name,score])
答案 3 :(得分:0)
我会使用带有组的正则表达式。
import re
def readText(group):
snap = []
with open(group+'.txt','r') as text:
for line in text:
matches = re.match(pattern="^(\w+):([\d\,\.]+)", string=line, flags=re.IGNORECASE)
if matches is not None:
print(matches.group(1))
print(matches.group(2))
max_score = max([float(x) for x in str.split(matches.group(2), sep=',')])
print(max_score)
if __name__ == '__main__':
readText('data')