2017-04-23 170 views
2

我是机器学习的新手。尝试将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' 

任何人可以帮助我这些问题?

+0

你做这个TextEdit中的文件也许? '\\ rtf1'看起来像一个富文本标题,比如会出现在一个富文本文件中(与纯文本不一样)。 –

+0

是的,我在TextEdit中做到了,但是我已经将它转换为.txt。那么你能告诉我应该在哪里创建我的文件? – Cassie

+0

如果您已将其创建为纯文本,则该错误应与您发布的内容不同。是吗?如果你仍然在那里看到'\\ rtf1',那么你可能还没有把它变成纯文本。 –

回答

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和使用的不是int()STR():classLabelVector.append(str(listFromLine1[-1]))

+0

我的意思是我的listFromLine只包含已经转换为int但不是字母'f'和'j'的字符串(数字),并且当我尝试int('f')时遇到错误,因此无法将其包含在listFromLine中。但是,我想在后面使用'f'和'j'的整数类型,所以我想知道是否有任何方法将这些字母转换为整数,但仍然将这些字母(不是数字)显示为classLabelVector的一个元素。 – Cassie

相关问题