我有一个像这样的csv文件
1,a,add
2,b,more
1,c,thinking
3,a,to
1,c,me
我希望将类别功能转换为数字格式,如下所示:
1,0,0
2,1,1
1,2,2
3,0,3
1,2,4
但我有一个问题:我在python中读取和写入文件时无法循环,要么只转换第二列,要么对第三列没有任何作用,要么转换第二列和第三列,但不转换为同一时间(类似于:
1,0,add
2,1,more
1,2,thinking
3,0,to
1,2,me
1,a,0
2,b,1
1,c,2
3,a,3
1,c,4
所以这是我的代码:
def construction_liste(reader, col):
liste_mot_different=[]
for line in reader:
if line[col] not in liste_mot_different:
liste_mot_different.append(line[col])
#print liste_mot_different
return liste_mot_different
def table_correspondance(liste):
table_correspondance = []
for i, item in enumerate(liste):
table_correspondance.append((item,i))
print table_correspondance
return table_correspondance
def replace_word2int(line, table_correspondance):
new_line = []
for item in line:
liste_table= [y[0] for y in table_correspondance]
if item not in liste_table:
new_line.append(item)
else:
i = [y[0] for y in table_correspondance].index(item)
new_line.append(str(table_correspondance[i][1]))
new_line = ",".join( new_line )
new_line += "\n"
print new_line
return new_line
input_file = sys.argv[1]
output_file = sys.argv[2]
i1 = open( input_file, 'rb' )
i2 = open( input_file, 'rb' )
reader1=csv.reader( i1 )
reader2=csv.reader( i2 )
o = open( output_file, 'w' )
sequence = [2,5]
for col in seq:
liste_mot_different=construction_liste(reader1,col)
table_correspondance_word2int=table_correspondance(liste_mot_different)
for line in reader2:
nouvelle_ligne = replace_word2int(line, table_correspondance_word2int)
o.write( nouvelle_ligne )
i1.close()
i2.close()
o.close()
在第1个函数中,我查看同一列的每一行,并为所有行中的同一列构造不同字符串的列表 在第二个函数中,我构造了一个“映射表”,将整数映射到先前构建的列表中的字符串 在第3个函数中,在文件中我将所有字符串替换为相应的整数,逐列
它适用于我的序列中的第一列,但不适用于其他列,我认为这是因为一旦它读取了所有行,它就不会再次执行了吗?
我怎么能这样做?谢谢
我也尝试使用with [...] as
,但它既不能正常工作