提高写入txt文件python的速度

时间:2016-10-21 01:19:07

标签: python

我正在根据每个单词的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文件的效率吗?

非常感谢

1 个答案:

答案 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"