2017-08-31 2 views
1

J'ai un fichier (fichier.txt) contenant les données suivantes:Comment trier un fichier texte basé sur une colonne en Python?

192.168.10.1/16, 22, 3265, tcp 
172.144.32,2/34, 22, 21, udp 
10.128.16.234/8, 0, 20, icmp 

J'ai besoin de trier ce par cloumn [0], cloumn [1] et colonne [2]

+2

quel est votre résultat attendu? –

+0

Note de côté: Vous devrez appeler 'import_file.close()' avant de 'return' de la fonction. –

Répondre

0

Ma solution est de créer une liste de tuples (un tuple pour chaque ligne) comme ceci:

(data_in_column_of_interest, entire_line) 

Lorsque le data_in_column_of_interest est un type de données et entire_line est une chaîne.

puis trier simplement cette liste:

def sortLinesByColumn(readable, column, columnt_type): 
    """Returns a list of strings (lines in readable file) in sorted order (based on column)""" 
    lines = [] 

    for line in readable: 
     # get the element in column based on which the lines are to be sorted 
     column_element= columnt_type(line.split(',')[column-1]) 
     lines.append((column_element, line)) 

    lines.sort() 

    return [x[1] for x in lines] 


with open('G:/Ftest/data.txt') as f: 
    # sort the lines based on column 1, and column 1 is type int 
    sorted_lines = sortLinesByColumn(f, 1, int) 

    for l in sorted_lines: 
     print(l) 

Entrée: fichier contenant:

1, Bob, 123 
5, Mary, 112 
0, Allen, 2421 
1, lucy, 341 

sortie: une liste de chaînes:

0, Allen, 2421 
1, Bob, 123 
1, lucy, 341 
5, Mary, 112