繁体   English   中英

拆分文本时出现“ValueError:int() 以 10 为基数的无效文字:''”

[英]I get “ValueError: invalid literal for int() with base 10: ''” when splitting text

这是我的任务:

1

我目前在第 2a 部分(打印所有上场时间超过 1700 分钟的球员)。

到目前为止,这是我的代码:

def part1():

    createfile=open("Assignment4.txt", "a+")
    createfile.write(f"Player Name          MinsPlayed  Goals   Assists YellowCard\n")
    createfile.write(f"Lionel Messi     1943        19      4       4\n")
    createfile.write(f"Robert Lewandowski   1864        28      6       2\n")
    createfile.write(f"Harry Kane           2017        14      11      1\n")
    createfile.write(f"Jack Grealish        1977        6       10      6\n")
    createfile.write(f"Cristiano Ronaldo    1722        19      3       1\n")
    createfile.write(f"Zlatan Ibrahimovic   1102        14      1       2\n")
    createfile.write(f"Gerard Moreno        1735        14      2       3\n")
    createfile.write(f"Romelu Lukaku        1774        18      6       4\n")
    createfile.write(f"Kylian Mbappe        1706        18      6       3\n")
    createfile.write(f"Erlin Haaland        1542        17      4       2")
    createfile.close()

part1()

def part2():

    filetoopen=open("Assignment4.txt", "r")
    for line in filetoopen.readlines():    
        linetosplit=line.split(' ')
        players = []
        player_name = (linetosplit[0] + ' ' + linetosplit[1])
        mins_played = (linetosplit[2])
        goals = (linetosplit[3])
        assists = (linetosplit[4])
        yellow_card = (linetosplit[5])
        players.append([player_name, mins_played, goals, assists, yellow_card]) 
    filetoopen.close()
            
    if mins_played > 1700:
        print(player_name)

part2()

当我运行它时,会弹出此错误消息

类型错误:“str”和“int”的实例之间不支持“>”

然后我尝试通过更改来修复它

mins_played = (linetosplit[2])

mins_played = int(linetosplit[2])

但随后弹出此错误消息

ValueError: int() 以 10 为底的无效文字:''

检查linetosplit实际返回的内容。 在这种情况下,您会看到它返回

['Player', 'Name', '', '', '', '', '', '', '', '', '', 'MinsPlayed', '', 'Goals', '', '', 'Assists', 'YellowCard\n']

['Lionel', 'Messi', '', '', '', '', '1943', '', '', '', '', '', '', '', '19', '', '', '', '', '', '4', '', '', '', '', '', '', '4\n']

['Robert', 'Lewandowski', '', '', '1864', '', '', '', '', '', '', '', '28', '', '', '', '', '', '6', '', '', '', '', '', '', '2\n']
...

因为所有的空间都被分割了。 正如@Reti43 所述, line.split(' ')line.split()之间存在差异。

但是,在您的情况下,这并不能完全解决您的问题。 由于文件的第一行是每列的定义。 而且您不能将此字符串转换为 integer。

解决此问题的一种方法是在循环时不包括第一行。 有多种不同的方法可以做到这一点,但我通过排除列表的第一项来使用列表操作。

for line in filetoopen.readlines()[1:]:
    # Code

这不包括第一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM