Datei lesen und in Array umwandeln (Pyhton)?

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!

Woher ich das weiß:Berufserfahrung – Softwareentwickler f. Web, Win. & Linux (seit 2001)

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(", ")]
AlphaKek 
Fragesteller
 20.01.2020, 12:44

Îch weiß garnicht wie und wo ich das einfügen soll

0
xxxcyberxxx  20.01.2020, 12:45
@AlphaKek

Dann überleg doch mal. Du hast deinen String eingelesen und möchtest mit den Integern arbeiten, die das hier erzeugt

0
AlphaKek 
Fragesteller
 20.01.2020, 12:51

Hab das jetzt so hinzugefügt, als Ausgabe steht jetzt: "None" . Was mache ich falsch?

0
xxxcyberxxx  20.01.2020, 12:51
@AlphaKek

hast du es einfach so kopiert, ohne anzupassen?

Hirn einschalten hilft manchmal :)

Bei mir sind die Variablen a und l benannt ...

0
AlphaKek 
Fragesteller
 20.01.2020, 12:56

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(", ")]

0
xxxcyberxxx  20.01.2020, 13:03
@AlphaKek

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

0
AlphaKek 
Fragesteller
 20.01.2020, 13:04

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]

0
xxxcyberxxx  20.01.2020, 13:18
@AlphaKek

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

1
AlphaKek 
Fragesteller
 20.01.2020, 16:00

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 ;)

0