單個實例的文件我有賬號,由行分隔,通過日誌交易產生的列表。創建的帳號
如何鞏固這一列表到一個文件中,將有每一個帳戶,而不是很多(其中每個帳戶超過一個交易已記錄)只有一個發生?
的Python是首選,但我還可以用C.
單個實例的文件我有賬號,由行分隔,通過日誌交易產生的列表。創建的帳號
如何鞏固這一列表到一個文件中,將有每一個帳戶,而不是很多(其中每個帳戶超過一個交易已記錄)只有一個發生?
的Python是首選,但我還可以用C.
with open(filename) as fin, open(newfilename, 'w') as fout:
fout.writelines(set(fin))
我不知道你的日誌文件看起來像什麼,但這應該在Python很好的工作
:
file = open('filename.txt', r+)
accountNos = set(file)
file.truncate()
for x in accountNos:
file.write(x)
file.close()
這將每行從文件中取出,並將它們存儲在一個集合中。一組是一個數據結構,它只存儲唯一元素並刪除重複項。在第二個for循環中,將該設置的內容寫回文件。
這本來是有幫助的,有你提供一個樣本日誌文件和操作系統。
如果你是在UNIX環境中,它用awk和排序是非常簡單的。
如果你的日誌文件(稱爲說的log.txt)包含帳戶信息在每行第三個字(見下面的日誌文件樣本):
LOG WARNING 12345 cancelled ....
LOG WARNING 67482 subscribed ....
請看下面的例子與美元符號作爲命令提示符:
$ awk '{print $3}' log.txt | sort -u
如果你在Windows環境下,你可以下載Cygwin的(http://www.cygwin.com/)的Windows,安裝並運行命令提示符上面的命令。
如果順序很重要,那麼你可以使用collections.OrderedDict
:
from collections import OrderedDict
with open('input') as fin, open('output', 'w') as fout:
uniques = OrderedDict.fromkeys(fin)
fout.writelines(uniques)
文件是可迭代的,所以你可以把它傳遞給'set'構造 –
謝謝,我會改進 – Stephan