Das folgende Python3-Programm kopiert auf zwei Arten den Inhalt einer TXT-Datei in Listen. Die TXT-Datei enthält keine versteckten (Steuer) Zeichen.Pyton3 Kopieren von Datei-Daten in Listen mit und ohne eval()
Ich habe drei Fragen:
Warum ist
lst_data[0:10]
nach 3 Elemente abgeschnitten?Warum
eval()
gibt die Lösung, die erwarteten 10 Elemente?Wie kann ich eine TXT-Datei ohne die Verwendung von
eval()
in eine Liste kopieren?
import os
lst_data = []
lst_eval = []
read_file=open("file.txt","r")
print("file DOES NOT CONTAIN HIDDEN CHARACTERS!")
print("Content file.txt " + read_file.read())
read_file.close()
read_file=open("file.txt","r")
print("WHY ONLY 3 LIST-ELEMENTS WHITHOUT eval()!!")
lst_data = read_file.read()
print("lst_data[0:10] " + str(lst_data[0:10]))
print("lst_data " + str(lst_data))
read_file.close()
read_file=open("file.txt","r")
print("OUTPUT RICHT WHITH eval()!!")
lst_eval = eval(read_file.read())
print("lst_eval[0:10] " + str(lst_eval[0:10]))
print("lst_eval " + str(lst_eval))
read_file.close()
Datei nicht HIDDEN Zeichen lang sein!
Inhalt datei.txt [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
warum nur 3 LIST-ELEMENT whithout eval()! !
lst_data [00.10] [0, 1, 2,
lst_data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
OUTPUT RICHT WHITE Eval() !!
lst_eval [00.10] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst_eval [0, 1, 2, 3, 4, 5, 6 , 7, 8, 9, 10, 11, 12]
'file.read()' gibt immer einen String; '[0, 1, 2,' waren die ersten 10 Zeichen dieser Zeichenfolge.Es wird nicht magisch Ihnen einen anderen Datentyp geben, nur weil der Inhalt der Zeichenfolge wie dieser Typ aussieht. 'ast.literal_eval()' wäre in diesem Fall eine sichere Alternative zu 'eval()'. – jasonharper
Sie könnten "repr" für Ihre verschiedenen Variablen und Slices aufrufen, anstatt "str" aufzurufen. Auf diese Weise könnten Sie sehen, dass 'lst_data' keine Liste ist, sondern eine Zeichenfolge (Sie sehen die Anführungszeichen in 'repr'). – Blckknght