split(os.linesep)错误:TypeError:需要类似字节的对象,而不是' str'

时间:2017-05-15 20:21:54

标签: python

我有这个简单的代码:

import subprocess, os
cmd = ['java', '-cp', '/weka.jar', 'weka.classifiers.bayes.NaiveBayes', '-t' ,         
       '/MyData.arff']
print (' '.join(cmd))
data = subprocess.check_output(cmd)
data = [line.strip().split('\t') for line in data.split(os.linesep)][0:-1]
print (data) 

当我运行它时,我收到此错误:

    data = [line.strip().split('\t') for line in data.split(os.linesep)][0:-1]
TypeError: a bytes-like object is required, not 'str'. 

有谁知道如何解决它?

1 个答案:

答案 0 :(得分:1)

默认情况下,subprocess会将 bytes 作为stdout输出。您不能将'...'字符串用于剥离或拆分,您需要使用bytes个对象。

告诉subprocess将数据解码为您的文本(使用universal_newlines=True或设置encoding参数),或使用bytes.splitlines()拆分文本,以及使用.split(b'\t')分割每一行。