2014-09-22 2 views
0

я получил следующее сообщение об ошибке в моем питоне коде:TypeError: writelines() требует итерации аргумента

 TypeError: writelines() requires an iterable argument 

Я знаю, что это ошибка занесена и раньше, но я не могу получил мой ответ. Вот мой код:

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() ожидает итерабельность (что-то, производящее последовательность 0 или более значений).

Использование file.writeline() (в единственном числе) вместо этого, или даже лучше, просто file.write():

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

Если вы пишете Tab-отдельный файл, вы можете захотеть использовать 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. Например, вы пытаетесь написать sting '\ t' с помощью writeline().

Смежные вопросы