提问者:小点点

需要一个可迭代的参数


我的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个答案

匿名用户

您正在使用写入(),但一次传递一个项目;file.writelines()期望迭代(产生0或更多值序列的东西)。

使用文件。writeline()(单数),或者更好,只需文件即可。write()

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

如果要编写单独的选项卡文件,可能需要使用csv模块:

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)

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

匿名用户

对于字符串,您应该write(),而对于字符串序列,您可以使用writelines()。请看这里的帖子。例如,您尝试使用writeline()编写sting'\t'。