Sortieren einer Datei durch die erste (oder zweite, oder sonst was) Spalte in python
Scheint dies eine sehr grundlegende Frage, aber ich bin neu in python, und nachdem er eine lange Zeit versucht, eine Lösung zu finden, die auf meinen eigenen, ich dachte, es ist Zeit zu Fragen, einige der fortgeschritteneren Menschen!
So, ich habe eine Datei (Beispiel):
ENSMUSG00000098737 95734911 95734973 3 miRNA
ENSMUSG00000077677 101186764 101186867 4 snRNA
ENSMUSG00000092727 68990574 68990678 11 miRNA
ENSMUSG00000088009 83405631 83405764 14 snoRNA
ENSMUSG00000028255 145003817 145032776 3 protein_coding
ENSMUSG00000028255 145003817 145032776 3 processed_transcript
ENSMUSG00000028255 145003817 145032776 3 processed_transcript
ENSMUSG00000098481 38086202 38086317 13 miRNA
ENSMUSG00000097075 126971720 126976098 7 lincRNA
ENSMUSG00000097075 126971720 126976098 7 lincRNA
und schreiben brauche ich eine neue Datei mit den gleichen Informationen, aber anhand der ersten Spalte sortiert.
Was ich so weit ist :
lines = open(my_file, 'r').readlines()
output = open("intermediate_alphabetical_order.txt", 'w')
for line in sorted(lines, key=itemgetter(0)):
output.write(line)
output.close()
Spielt es keine Rückkehr mir keine Fehler, sondern nur schreibt die Ausgabedatei genau so, wie die input-Datei.
Ich weiß, es ist sicherlich eine sehr grundlegende Fehler gemacht, aber es wäre toll, wenn einige von Euch mir sagen könnte was ich falsch mache!
Vielen Dank!
Bearbeiten
Ich habe ein Problem mit der Art, wie ich die Datei öffnen, so dass die Antworten bezüglich der bereits geöffnet arrays nicht wirklich helfen.
- Haben Sie versucht, das Lesen von Zeile und zippen?
- Hi, ich denke, das könnte beantwortet werden, stackoverflow.com/questions/20099669/..., stackoverflow.com/questions/20183069/... ...
- Nicht ganz, diejenigen, die erklären, wie zu tun, was der OP versucht bereits.
- Ja, ich sah diese Antworten, aber der Teil, mit dem war ich stuggling mit zu tun hatte mit der Art und Weise des Lesens meiner Datei, so dass die Antwort bereits im Gespräch über ein array nicht mir helfen. Tank dir trotzdem 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Des Problems, das Sie haben ist, dass Sie nicht drehen Sie jede Zeile in einer Liste. Wenn Sie Lesen Sie in der Datei, Sie sind nur immer die ganze Zeile als string. Sie sind dann so Sortieren, indem Sie die ersten Zeichen in jeder Zeile, und das ist immer das gleiche Zeichen in Ihrer Eingabe
'E'
.Nur Sortieren nach der ersten Spalte, die Sie brauchen, um split den ersten block aus und Lesen Sie einfach diesen Abschnitt. So dein key sollte so sein:
split
Ihr die Zeile in eine Liste, und dann wird die erste Spalte in dieser Liste.Wenn Ihr input-file ist tab-getrennt, Sie können auch die csv-Modul.
sortiert nach der ersten Spalte.
Ändern Sie die Nummer in
zum Sortieren nach einer anderen Spalte.
from operator import itemgetter
am Anfang.Gleiche Idee wie SuperBiasedMan, aber ich bevorzuge diesen Ansatz: wenn Sie möchten, eine andere Art zu Sortieren (zum Beispiel: wenn die erste Spalte übereinstimmt, Sortieren Sie nach der zweiten, dann Dritten, etc) ist es leichter umsetzbar
Schreiben Sie eine Funktion, der ein Dateiname, Trennzeichen und Spalte Sortieren, indem Sie mit
csv.reader
zum Parsen der Datei:Können Sie dies schnell zu tun, mit pandas, wie folgt, mit der Daten Datei genau wie Sie sich zeigen (D. H., mit Variablen von Leerzeichen als Trennzeichen):
Nur das Ergebnis überprüfen:
Können Sie tun, multi-Spalte Sortieren, indem zusätzliche Spalten, um die Liste in der colmuns= [...] - Schlüsselwort-argument.