Seite 1 von 1

Datei einlesen und als Matrix erstellen

Verfasst: Donnerstag 19. November 2020, 11:32
von Simon_2468
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

Re: Datei einlesen und als Matrix erstellen

Verfasst: Donnerstag 19. November 2020, 12:19
von Simon_2468
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?

Re: Datei einlesen und als Matrix erstellen

Verfasst: Donnerstag 19. November 2020, 12:44
von noisefloor
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

Re: Datei einlesen und als Matrix erstellen

Verfasst: Donnerstag 19. November 2020, 13:45
von DeaD_EyE
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.