2014-09-22 104 views
0

我在Python代码得到了以下错误:类型错误:writelines()需要一个可迭代的说法

 TypeError: writelines() requires an iterable argument 

我知道这之前submited错误,但我没有得到我的答案。这里是我的代码:

def Normaliaze(dataset):  
     final_list=[] 
     twoCol = [ item[0:2] for item in dataset] 
     labels = [ item[2] for item in dataset] 
     twoColData = preprocessing.scale(float64(twoCol)) 

     for x,y in itertools.izip(twoColData,labels): 
     temp =[] 
     temp.append(x[0]) 
     temp.append(x[1]) 
     temp.append(y) 
     final_list.append(temp) 

     caving = open('/home/nima/Desktop/ramin-ML-Project/caving.txt','w') 

     for item in final_list: 
     if item[2] == 'caving':    
      caving.writelines(item[0]) 
      caving.writelines('\t') 
      caving.writelines(item[1]) 
      caving.writelines('\n') 

回答

3

您正在使用writelines()一个项目,在经过一段时间; file.writelines()需要一个iterable(产生一个0或更多值的序列)。

使用file.writeline()(单数)来代替,甚至更好,只是file.write()

caving.write(item[0]) 
caving.write('\t') 
caving.write(item[1]) 
caving.write('\n') 

如果你正在写一个制表单独的文件,你可能想使用csv module代替:

import csv 

def normalize(dataset):  
    twoCol = [item[:2] for item in dataset] 
    labels = [item[2] for item in dataset] 
    twoColData = preprocessing.scale(float64(twoCol)) 

    with open('/home/nima/Desktop/ramin-ML-Project/caving.txt', 'wb') as caving: 
     writer = csv.writer(caving, delimiter='\t') 

     for data, label in itertools.izip(twoColData, labels): 
      if label == 'caving': 
       writer.writerow(data) 

这会产生相同的输出,但麻烦较少。

0

对于字符串,您应该写(),而对于字符串序列,您可以使用writelines()。看帖子here。例如,你试图用writeline()来写入'\ t'。

相关问题