我正在根据每个单词的TD IDF计算生成一个txt文件。
我正在使用此代码编写文件
w_writer = open("tf_idf_vectors_stops_2.txt", "w")
for x in xrange(0, len(listPatient)):
patientId = listPatient[x] #List for patientid
for words in tdDict_final[patientId]:
w_writer.write(patent + "," + str(multiListTokens.index(words[0])) + "," + str(words[2]))
w_writer.write("\n")
w_writer.close()
listPatient是一个由排序ID组成的列表。
listPatient = ['001', '002', '003', '004']
tdDict_final是一个字典,由ID作为键和单词和单词值
组成在代码中我们为单词和单词[2]值调用单词[0],因为单词[1]将为“:”,tdDict_final的格式如下所示。
{'001': [('dog', ':', '0.2534879), ('cat', ':', '0.0133487)],
'002': [('floor', ':', '0.047589'), ('board'), ':' ('0.099345)],
'003': [('key'), ':', '0.04993)],
'004': [('thanks', ':', '0.01479')]}
tdDict包含listPatient
中的所有患者multilistTokens是一个包含许多不同词汇表(令牌)的列表
multilistTokens包含在tdDict中找到的所有可能的单词词汇表。
问题是,上面的代码在写出来时非常缓慢而且迟钝。
无论如何我可以使用上面的代码提高写入txt文件的效率吗?
非常感谢
答案 0 :(得分:0)
with open("tf_idf_vectors_stops_2.txt", "w") as w_writer:
for patientId in listPatient:
for words in tdDict_final[patientId]:
w_writer.write("%s,%s,%s\n" % (patent, str(multiListTokens.index(words[0])), str(words[2])))
第一次 |您应该使用with
语句而不是打开文件,然后手动关闭文件。 with
语句是python context manager,这意味着它会将文件打开为w_writer
,然后当您完成后,它会自动关闭它。
第二次 |没有必要使用上面的xrange
,因为除patientId
listPatient
patientId = listPatient[x]
之外,你没有使用x
。您可以直接从patientId
中提取listPatient
并从那里使用它。
第3次 |在python中使用+
方法将字符串添加到一起是非常慢的。在python中连接(连接)字符串的最有效方法是使用join方法或使用就地分隔符(就像我一样)。此外,您不应该调用write两次,因为您可以在第一个write语句中包含"\n"
。