TypeError:writelines()需要一个可迭代的参数

时间:2014-09-22 19:56:49

标签: python file iterable

我的python代码中出现以下错误:

     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')

2 个答案:

答案 0 :(得分:3)

您正在使用writelines(),但一次传入一项; file.writelines()需要一个可迭代的(产生一个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)

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

答案 1 :(得分:0)

对于字符串,您应该写(),而对于一系列字符串,您可以使用writelines()。查看帖子here。例如,您尝试使用writeline()编写sting'\ t'。