2012-06-13 1 views
0

J'ai beaucoup de nombreux fichiers dans un dossier, et je veux les traiter l'un après l'autre, j'ai besoin d'un dictionnaire global pour enregistrer l'identifiant de l'utilisateur et le flowcount, mais si mon le code est comme ceci, quand le deuxième ou le troisième dossier est traité, l'user_dict pour le dernier dossier perdra. Parce que si un identifiant d'utilisateur dans le second fichier est identique à celui du premier fichier, alors si le même flowcount doit lui être affecté au lieu d'un nouveau, comment puis-je faire en sorte qu'un dictionnaire continue à croître lorsque les fichiers sont ouverts un à un ?comment traiter le fichier un par un en 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"]) 

Comme la taille de chaque fichier est très grand, je les ai fusionné tout en un seul fichier, puis a couru le script à traiter, l'ordinateur va tuer le processus après un certain temps, je dois les traiter un par un au lieu

Répondre

3

Vous pouvez ouvrir plusieurs fichiers dans votre script python et utilisez votre boucle pour prendre soin de chacun d'eux

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

Vous pouvez toujours déclariez

global user_dict 

dans votre code ... Mais est-ce la meilleure approche? Peut-être que vous devriez utiliser une classe:

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

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

puis:

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