txt

时间:2016-04-28 17:33:25

标签: python sorting

文本文件如下所示:

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)

4 个答案:

答案 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')