我的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')
答案 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'。