2013-07-01 27 views
4

單個實例的文件我有賬號,由行分隔,通過日誌交易產生的列表。創建的帳號

如何鞏固這一列表到一個文件中,將有每一個帳戶,而不是很多(其中每個帳戶超過一個交易已記錄)只有一個發生?

的Python是首選,但我還可以用C.

回答

5
with open(filename) as fin, open(newfilename, 'w') as fout: 
    fout.writelines(set(fin)) 
1

我不知道你的日誌文件看起來像什麼,但這應該在Python很好的工作

file = open('filename.txt', r+) 
accountNos = set(file) 

file.truncate() 
for x in accountNos: 
    file.write(x) 

file.close() 

這將每行從文件中取出,並將它們存儲在一個集合中。一組是一個數據結構,它只存儲唯一元素並刪除重複項。在第二個for循環中,將該設置的內容寫回文件。

+0

文件是可迭代的,所以你可以把它傳遞給'set'構造 –

+0

謝謝,我會改進 – Stephan

1

這本來是有幫助的,有你提供一個樣本日誌文件和操作系統。

如果你是在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,安裝並運行命令提示符上面的命令。

1

如果順序很重要,那麼你可以使用collections.OrderedDict

from collections import OrderedDict 

with open('input') as fin, open('output', 'w') as fout: 
    uniques = OrderedDict.fromkeys(fin) 
    fout.writelines(uniques)