拆分文本时,我收到“ValueError: invalid literal for int() with base 10: ''”

时间:2021-03-06 00:12:18

标签: python string text-files typeerror valueerror

这是我的任务:

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: 以 10 为基数的 int() 的无效文字:''

1 个答案:

答案 0 :(得分:0)

检查 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() 之间存在差异。

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

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

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

这不包括第一行。