2 Stimmen

Python sortiert eine Textdatei?

Also weiß ich, wie man eine Textdatei importiert und Zahlen sortiert, wie zum Beispiel:

1
6
4
6
9
3
5

Aber ich weiß nicht, wie man Daten sortiert, die so aussehen:

Merchant_9976 20122
Merchant_9977 91840
Merchant_9978 92739
Merchant_9979 97252
Merchant_9980 76885
Merchant_9981 67835
Merchant_9982 42201
Merchant_9983 47463

Hier ist mein bisheriger Code

def sort_slow(seq):
    for i in range(1, len(seq)):
        j = i
        while j > 0 and seq[j - 1] > seq[j]:
            seq[j - 1], seq[j] = seq[j], seq[j - 1]
            j -= 1
    return seq

def main():
    fileName = str(input('Bitte geben Sie einen Dateinamen ein: '))
    file = open(fileName)
    sort1 = []
    for lines in file:
        sort1.append(int(lines.strip()))
    sort_slow(sort1)
    print(sort1)

main()

Ich bin relativ neu im Programmieren.*seit etwa 1 Monat

1voto

Cory Kramer Punkte 114981

Das Folgende wird nach dem Integer-Wert in der rechten Spalte sortiert

with open('file.txt', 'r') as f:
    data = f.readlines()
    sorted_data = sorted(data, key=lambda i: int(i.split()[1]))
    print(sorted_data)

Oder wenn Sie sie einfach nach der Händlernummer sortiert haben möchten

with open('file.txt', 'r') as f:
    data = f.readlines()
    sorted_data = sorted(data)
    print(sorted_data)

1voto

smci Punkte 29317

Wie Ashwini sagte, verwende einfach die sort()-Methode oder noch besser die sorted()-Funktion, wie Reymond Hettinger sagt. Hier verlassen wir uns auf die Standard-Sortierreihenfolge, die die einfache alphanumerische Reihenfolge des Strings verwendet, daher wird zuerst nach Feld1 und dann nach Feld 2 sortiert...

Also kannst du einfach Folgendes tun:

my_sorted_contents = sorted(line.strip() for line in open('MYTEXTFILE'))
my_sorted_contents
['Merchant_9976 20122', 'Merchant_9977 91840', 'Merchant_9978 92739', 'Merchant_9979 97252', 'Merchant_9980 76885', 'Merchant_9981 67835', 'Merchant_9982 42201', 'Merchant_9983 47463']

Wenn du die Zeilen tatsächlich in Felder aufteilen möchtest (so dass du eine allgemeinere Feld-basierte Sortierreihenfolge verwenden könntest), füge einen .split()-Aufruf ein, bevor du sortierst.

Für Nicht-Standard-Sortierreihenfolgen z.B. nach numerischem Wert ("Merchant_100" > "Merchant2"), übergib einen Vergleichsschlüssel, wie in jpmc26's Kommentar erwähnt: sorted(... key=mykeyn )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X