Datei lesen und in Array umwandeln (Pyhton)?
Hallo Leute,
ich bin gerade dabei ein Projekt für die Schule zu bearbeiten und würde gerne wissen wie man eine Datei in einen Array oder Liste umwandeln kann, welches man dann benutzen kann.
Die Datei konnte ich schon öffnen und Anzeigen lassen mit:
#Programm
fobj = open("text.txt","r")
Liste = fobj.readlines()
print(Liste)
fobj.close()
#Ausgabe
['16, 11, 7, 7, 1, 12, 3, 9, 2, 5']
So. Und jetzt möchte ich das in eine Liste umwandeln, um diese Liste in einem weiteren Schritt benutzen zu können.
Das folgende Programm wäre der nächste Schritt: Das Sortieren der Liste.
def Sortierverfahren_Bubblesort(Liste):
n = len(Liste)
for i in range(n):
for x in range(0, n-i-1):
if Liste[x] > Liste[x+1] :
Liste[x], Liste[x+1] = Liste[x+1], Liste[x]
Sortierverfahren_Bubblesort(Liste)
print(Sortierverfahren_Bubblesort(Liste))
#Ausgabe
['16, 11, 7, 7, 1, 12, 3, 9, 2, 5']
None
Das einzige was ich bräuchte ist: Die Datei in eine Liste umwandeln, sodass diese sortiert werden kann.
In der Datei steht: 16, 11, 7, 7, 1, 12, 3, 9, 2, 5
Danke für hilfreiche Antworten!
2 Antworten
Also einfacher ist:
lines = []
with open("users.txt", "r") as f:
for line in f:
lines.append(line.strip())
Dabei musst du nicht auf das schließen der Datei denken bzw. kannst es nicht vergessen. So ließt man in jede Zeile in einen eigenen Eintrag der Liste.
Deine Datei enthält nur eine Zeile mit kommagetrennten Werten.
Da kannst du zB
elements = line.replace(" ", "").split(",")
verwenden und dies dann entsprechend weiterverarbeiten oder mit
lines.extend(line.replace(" ", "").split(","))
der Liste hinzufügen als weitere Elemente hinzufügen. Verwechsel das aber nicht mit .append() sonst fügst du die Liste an sich als Element hinzu und nicht die Elemente der Liste!
So könnte deine Datei auch gleich mehrere Zeilen enthalten...
Was an deinem Sortierverfahren nicht stimmt untersuchst du am besten mit einem Debugger! Nimm dazu zB VisualStudio Code!
An sich ist das ja schon eine Liste, die hier nunmal deine eine Zeile als String enthält
Was du prinzipiell machen musst:
- String splitten
- Ergebnisse in int casten
Das kannst du aber schön als Einzeiler verarbeiten, mithilfe der List Comprehension (wenn a dein Input und l das Ergebnis ist):
l = [int(x) for x in a[0].split(", ")]
Das ganze ging so wie ich es gemacht habe. Nur hat Spyder irgendwelche fehler angezeigt, die garnicht vorhanden waren. Deshalb war ich mir so unsicher und verwirrt. Danke nochmal für deine Hilfe ;)
Ah, ich sehe Grad, du gibst die Ausgabe der Funktion aus. Du gibst aber keinen Wert zurück
Da du die Liste aber direkt bearbeitest, kannst du nach der Funktion einfach die Liste ausgeben lassen
l ist bei mir die Liste und a meine Datei:
fobj = open("Rand10.txt","r")
Datei = fobj.readlines()
fobj.close()
Liste = [int(x) for x in Datei[0].split(", ")]
1. Bitte gewöhn dir an, variablen klein zu schreiben
2. Joa, sieht doch ned schlecht aus
3. An sich ist a ja auch eine Liste, die nur die Datei zeilenweise als String enthält
Hab das jetzt so hinzugefügt, als Ausgabe steht jetzt: "None" . Was mache ich falsch?
hast du es einfach so kopiert, ohne anzupassen?
Hirn einschalten hilft manchmal :)
Bei mir sind die Variablen a und l benannt ...
Dann überleg doch mal. Du hast deinen String eingelesen und möchtest mit den Integern arbeiten, die das hier erzeugt
Die Ausgabe ist immer noch die selbe: None
Wenn ich nur die Liste ausgeben lasse, dann bekomme ich eine Liste:
[16, 11, 7, 7, 1, 12, 3, 9, 2, 5]