[英]Improving the speed of writing into a txt file 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文件的效率嗎?
非常感謝你
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上下文管理器 ,這意味着它將以w_writer
打開文件,然后當你完成它將自動關閉它。
第二 | 沒有必要使用上面的xrange
,因為除了你從listPatient
( patientId = listPatient[x]
)獲取patientId
之外,你沒有使用x
。 您可以直接從listPatient
提取patientId
並從那里使用它。
第3 | 在python中使用+
方法將字符串添加到一起是非常慢的。 在python中連接(連接)字符串的最有效方法是使用join方法或使用就地分隔符(就像我一樣)。 此外,您不應該調用write兩次,因為您可以在第一個write語句中包含"\\n"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.