Datei einlesen und als Matrix erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Simon_2468
User
Beiträge: 6
Registriert: Dienstag 17. November 2020, 19:04

Moin Moin,
Wie ich eine Datei lese und wie ich eine Matrix erstelle habe ich bereits gelernt, jedoch möchte ich gerne dies kombinieren.
#Einlesen der Datei

Code: Alles auswählen

text = open("Khun_Pan.txt","r")
print(text.read())
text.close()
Das wird ausgegeben:
5,10,10,6
5,10,10,6
0,9,9,0
7,1,2,8
7,3,4,8
Nun versuche ich, dass er daraus folgende Matrix erstellt:
startfeld = [5,10,10,6] , [5,10,10,6] , [0,9,9,0] , [7,1,2,8] , [7,3,4,8]

Ich habe ungefähr daran gedacht, aber mir gelingt die Kombination daraus nicht.
for i in range(5):
for j in range(4):
startfeld[j] = text.readlines(i*4+j)

Habt ihr eine Idee wie ich die eingelesene Datei gleich als Matrix erstellen kann?
MfG Simon
Simon_2468
User
Beiträge: 6
Registriert: Dienstag 17. November 2020, 19:04

import numpy as np
text = np.loadtxt("Khun_Pan.txt")
print(text)

Ich hätte die Lösungsidee, jedoch ist das ein array...
Kann ich diesen als Liste umformen oder brauche ich eine andere Lösung?
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Nun versuche ich, dass er daraus folgende Matrix erstellt:
startfeld = [5,10,10,6] , [5,10,10,6] , [0,9,9,0] , [7,1,2,8] , [7,3,4,8]
Eine "Matrix" gibt es ja so als Datentyp erst mal nicht in Python... Was meinst du denn genau mit "Matrix". Was du an die Variabel "startfeld" bindest ist für Python ein Tupel von Listen.

Was du mit numpy machst ist denke ich schon eher das, was du suchst. Was stört sich daran, dass der Datentyp ein NumPy Array ist? Das ist nun mal der Grunddatentyp von NumPy.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Mit Python:

Code: Alles auswählen

with open("kp.txt") as file:
    matrix = []
    for line in file: # <- über die Zeilen iterieren
        if not line.strip(): # <- leere Zeile == keine Daten
            continue
        row = list(map(int, line.split(","))) # Die Zeile beim Komma trennen und die Werte in int umwandeln
        matrix.append(row)
Ginge auch mit einem Einzeiler, aber das sieht dann nicht gut aus.
Wenn man aber mit mehrdimensionalen Matrizen arbeiten muss, ist Numpy die bessere und effektivere Wahl.

Anmerkung: int() ignoriert \n in der Zeichenkette. Viele strippen unnötigerweise die Zeilenenden, obwohl es nicht notwendig ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten