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

Posted

技术标签:

【中文标题】拆分文本时出现“ValueError:int() 的无效文字,基数为 10:\'\'”【英文标题】:I get "ValueError: invalid literal for int() with base 10: ''" when splitting text拆分文本时出现“ValueError:int() 的无效文字,基数为 10:''” 【发布时间】:2021-06-04 15:22:30 【问题描述】:

这是我的任务:

我目前正在进行第 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()

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

TypeError: '>' 在 'str' 和 'int' 的实例之间不支持

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

mins_played = (linetosplit[2])

mins_played = int(linetosplit[2])

但随后弹出此错误消息

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

【问题讨论】:

这个错误意味着linetosplit[2]的值是'',不能转换成int 您是否尝试过打印linetosplit 的内容以查看输出是否符合您的预期? 您应该使用制表符 (“\t”) 作为列之间的分隔符,然后通过制表符 line.split(“\t”) 分割输入行。然后以分钟为单位的值将被正确解析为 int。 这能回答你的问题吗? Is there a difference between .split(" ") vs .split() 【参考方案1】:

检查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

这不包括第一行。

【讨论】:

好的,我现在有了这个,但它什么也没返回:filetoopen=open("Assignment4.txt", "r") for line in filetoopen.readlines()[1:]: linetosplit=line. split() 球员 = [] player_name = (linetosplit[0] + '' + linetosplit[1]) mins_played = int (linetosplit[2]) 进球 = int (linetosplit[3]) 助攻 = int (linetosplit[4]) Yellow_card = int (linetosplit[5]) player.append([player_name, mins_played, 进球, 助攻, yellow_card]) filetoopen.close() if mins_played > 1700: print(player_name) @ATSpiro 不要移动问题的门柱。你问了一个错误。你的代码有缺陷,通过修复它,你会遇到下一个,但这不是处理新错误的地方。提示:仔细阅读你的作业,你应该迭代列表中的每个项目并检查该条件。

以上是关于拆分文本时出现“ValueError:int() 的无效文字,基数为 10:''”的主要内容,如果未能解决你的问题,请参考以下文章

尝试执行 react-native 应用程序时出现“错误无法读取未定义的属性‘拆分’”

F#:通过模式匹配返回列表时出现问题?

在 SSIS 中将数据写入 Excel 文件时出现无法解释的错误

从 TextArea 拖动选定文本时出现 Javafx 问题

为啥以编程方式添加我的文本视图时出现 NullPointerException?

写入文本文件时出现“文件正在使用”错误