簡體   English   中英

提高寫入txt文件python的速度

[英]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 ,因為除了你從listPatientpatientId = listPatient[x] )獲取patientId之外,你沒有使用x 您可以直接從listPatient提取patientId並從那里使用它。

第3 | 在python中使用+方法將字符串添加到一起是非常慢的。 在python中連接(連接)字符串的最有效方法是使用join方法或使用就地分隔符(就像我一樣)。 此外,您不應該調用write兩次,因為您可以在第一個write語句中包含"\\n"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM