2012-06-13 16 views
0

我在一個文件夾中有很多很多文件,我想要一個接一個地處理它們,我需要一個全局字典來記錄用戶標識符和流程計數,但是如果我的代碼就像這樣,當處理第二個或第三個文件時,最後一個文件的user_dict將會丟失。如何在python中逐一處理文件

因爲如果第二個文件中的用戶標識與第一個文件中的用戶標識相同,那麼如果應該爲其分配相同的流程計數而不是新的文件,那麼如何在逐個打開文件時使一個字典保持增長?

for line in fd.readlines(): 
    obj = json.loads(line) 
    user = obj["host_dst"]["addr"] + '_' + str(obj["host_dst"]["port"]) 
    if user not in user_dict: 
     user_dict[user] = [] 
    user_dict[user].append(obj["params"]["flowcount"]) 

由於每個文件的大小是非常大的,我合併他們都到一個文件,然後運行該腳本來處理,該計算機將在一段時間後殺死的過程中,我必須處理它們一個接一個而不是

回答

3

你可以在你的Python腳本打開多個文件,並使用您的for循環來照顧他們每個人的

for filename in os.listdir(folderpath): 
    filepath = os.path.join(folderpath, filename) 
    fd = open(filepath, 'r') 

    # here is your code 
    for line in fd.readlines(): 
     .... 
0

您可以隨時申報

global user_dict 

在你的代碼......但是,這是最好的方法?也許你應該使用一個類:

class FileProcessor(object): 
    def __init__(self): 
     self.user_dict = dict() 

    def process_file(file_name): 
     .... 
     self.user_dict[]... 

然後:

processor = FileProcessor() 
for file in files: 
    processor.process_file(file)