2017-09-20 4 views
0

J'ai un répertoire plein de très gros fichiers csv qui ont été convertis en csv à partir de pcap. J'essaie de parcourir chaque fichier csv dans ce répertoire et d'obtenir les adresses IP source les plus courantes (colonne 2).Obtenir les ip les plus courants du répertoire complet de pcap en fichiers csv

Actuellement, ma sortie est incorrecte, car il semble que j'ai réussi à avoir chaque fichier vider ses valeurs dans le fichier suivant avant de commencer. Chaque fichier semble avoir le même ip, et je sais que ce n'est pas le cas.

ipCounter = collections.Counter() 

#iterate through all of the files in the directory, using glob 
for filename in glob.glob('/path/to/directory/*'): 
    with open(filename) as input_file: 
     #skip column titles 
     input_file.next() 

     for row in csv.reader(input_file, delimiter=','): 
      ipCounter[row[2]] += 1 

    print 'Source IPs most common in: %s' % filename 
    print ipCounter.most_common() 

Je ne suis pas un pro avec Python, donc il peut y avoir une meilleure façon de faire, mais c'est ce que j'ai obtenu jusqu'à présent.

Répondre

1

Votre approche semble bien. Si vous voulez faire un par-fichier most_common() si vous devez déplacer votre compteur à l'intérieur de la boucle for. Ou avoir deux compteurs, l'un vous en vous donnant un total par fichier, et le second donnant un nombre global pour l'ensemble du dossier:

import collections 
import glob 

ip_counter_all = collections.Counter()  

for filename in glob.glob('ip*.csv'): 
    ip_counter = collections.Counter() 

    with open(filename) as input_file: 
     csv_input = csv.reader(input_file) 
     header = next(csv_input) 

     for row in csv_input: 
      ip_counter[row[2]] += 1 

    ip_counter_all.update(ip_counter) 

    print '\nSource IPs most common in: {}'.format(filename) 

    for ip_addr, count in ip_counter.most_common(): 
     print " {} {}".format(ip_addr, count) 

print '\nOverall IPs most common:' 

for ip_addr, count in ip_counter_all.most_common(): 
    print " {} {}".format(ip_addr, count) 

Ce qui donnerait vous émettez tels que:

Source IPs most common in: ips.csv 
    1.1.1.1 2 
    1.2.3.4 1 
    1.4.2.3 1 

Source IPs most common in: ips2.csv 
    1.1.1.1 2 
    1.2.3.4 1 
    1.4.2.3 1 

Overall IPs most common: 
    1.1.1.1 4 
    1.2.3.4 2 
    1.4.2.3 2 

Vous pourriez utilisez également la nouvelle méthode format() pour afficher vos chaînes.