2016-04-12 12 views
2

Ich bin mir bewusst, dass dies bereits beantwortet wurde, aber überprüfen Sie bitte, dass andere Antworten für diese Instanz relevant sind!Warum denkt Python, dass mein Array 0-d ist? (TypeError: Iteration über ein 0-d-Array)

Ich schreibe ein Array in eine Datei als eine Zeichenfolge, so dass es gespeichert werden kann, wenn mein Skript nicht ausgeführt wird und bei der Ausführung wieder leicht zugegriffen werden kann. Wenn ich diesen String dann wieder aus der Datei lese, wird er automatisch als String gelesen.

Ich kann dies mit einer for-Schleife beheben, die durch die gespeicherte Zeichenfolge iteriert und jeden Eintrag an ein leeres Array anfügt, aber das scheint wie Overkill - oder? Gibt es eine bessere Möglichkeit, eine Zeichenfolge zu lesen und in ein Array zu konvertieren?

So ... so etwas wie dies läuft das erste Mal, um ein Array zu erzeugen und sie in einer Datei als String schreiben:

the_file = open('.the_file.txt', 'w') 
the_array = [10, 20, 30, 40, 50] 
the_file.write(str(the_array)) 
the_file.close() 

Der der Code beim nächsten Mal einen anderen Abschnitt des Codes ausgeführt wird wird ausgeführt, dass so etwas wie dieses:

the_file = open('.the_file.txt', 'r') 
the_array = the_file.read() 
the_file.close() 

Wenn ich die the_array Variable und den Typ an dieser Stelle drucken, erhalte ich:

[10, 20, 30, 40, 50] 
<type 'str'> 

So folge ich dem gegebenen Rat in this similar question here und zu tun:

the_array = np.asarray(the_array) 

... und drucken dann die the_array Variable und den Typ an dieser Stelle zu prüfen, ob dies funktioniert hat, zu erhalten:

[10, 20, 30, 40, 50] 
<type 'numpy.ndarray'> 

Aber jetzt, wenn ich den Rest meines Code ausführen bekomme ich den Fehler:

TypeError: iteration over a 0-d array 

zu diesem Teil meines Codes Traced zurück:

the_array = sorted(the_array, reverse=True) 

Kann mir hier jemand helfen; Warum denkt Python, dass mein Array 0-d ist?

+1

'np.asarray' analysiert die Strings nicht. – user2357112

+0

Das würde es erklären; Danke - ich bin mir ziemlich sicher, dass ich das auch wusste ... –

Antwort

3

the_array = np.asarray(the_array) erstellt ein Array mit einem Element darin: Ihre Zeichenfolge "[10, 20, 30, 40, 50]". Anstatt Ihre Datei einzulesen, wenn Sie import json und the_array = the_file.read() durch the_array = json.load(the_file) ersetzen, erhalten Sie stattdessen eine Liste und können diese einfach in ein numpliges Array konvertieren.

Verwandte Themen