将字符串(字母)从文件文本转换为整数

时间:2017-04-23 02:13:17

标签: python string machine-learning type-conversion int

我是机器学习的新人。尝试使用int作为字母时遇到了一些问题。我在Mac OS上使用Python 3.5。这是我的代码:

def file2matrix(filename):

    fr = open(filename)
    numberOfLines = len(fr.readlines())
    returnMat = zeros((numberOfLines, 3))
    classLabelVector = []
    fr = open(filename)
    index=0
    for line in fr.readlines():
        line = line.strip()
        listFromLine1 = line.split('\t')
        listFromLine = zeros(3)
        i = 0
        for value in listFromLine1:
            if value.isdigit():
                valueAsInt = int(value)
                listFromLine[i] = valueAsInt
                i += 1
        returnMat[index, :] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine1[-1]))
        index += 1
    return returnMat, classLabelVector

这是我的txt文件:

23  8   1   f
7   8   5   j
5   9   1   j
6   6   6   f

这是错误:

  classLabelVector.append(int(listFromLine1[-1])) ValueError: invalid literal for int() with base 10: 'f'

有人可以帮我解决这些问题吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您想要的结果,您想要返回一个包含n个列表的列表。每个清单都沿着[23。 8. 1.]。然后你想要一个第二个列表,它列出每个列表的最后一个数字:[1,5,1,6]。

假设这一切都是正确的,你得到classLabelVector.append(int(listFromLine1[-1])) ValueError: invalid literal for int() with base 10: 'f'的原因是因为你没有返回任何数字,而是返回一个字符串。我发现了3个应该解决错误的问题。

首先,我发现没有' \ t'在您的文本文档中。我改为使用listFromLine1 = line.split(' '),它基于空格分割。这可能只是从你发布时复制的方式来看。

其次,当你为listFromLine中的每个位置分配一个值时,你会忽略它并从listFromLine1追加你没有做任何事情,所以它仍然是一个字符串。

第三,尝试使用if value.isnumeric():代替if value.isdigit():

修复这些问题应该让程序正常运行。此外,您打开文件并运行fr.readlines()两次,从不告诉它关闭。您为相同的信息制作程序两次。您应该尝试将其重写为仅打开一次并使用with open() as fr:,因为它将在完成后关闭。

编辑:如果你想要第二个列表而不是[f,j,j,f],那么将它保持为listFromLine1并使用str()而不是int():classLabelVector.append(str(listFromLine1[-1]))