Le programme Python3 ci-dessous copie de deux manières le contenu d'un fichier txt en listes. Le fichier txt ne contient aucun caractère caché (contrôle).Pyton3 Copie de données de fichier dans des listes avec et sans eval()
J'ai trois questions:
Pourquoi
lst_data[0:10]
après 3 éléments tronqués?Pourquoi
eval()
donne la solution, les 10 éléments attendus? Comment copier un fichier txt dans une liste sans utilisereval()
?
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()
fichier NE CONTIENT PAS PERSONNAGES CACHÉ!
contenu file.txt [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
pourquoi seulement 3 LISTE DES ELEMENTS-SAINES eval()! !
lst_data [00:10] [0, 1, 2,
lst_data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
SORTIE RICHT WHITH 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()' retourne toujours une chaîne; '[0, 1, 2,' est arrivé à être les 10 premiers caractères de cette chaîne.Cela ne va pas vous donner un type de données différent, simplement parce que le contenu de la chaîne ressemble à ce type. 'ast.literal_eval()' serait une alternative sûre à 'eval()' dans ce cas. – jasonharper
Vous pouvez appeler 'repr' sur vos différentes variables et tranches au lieu d'appeler' str'. De cette façon, vous seriez en mesure de voir que 'lst_data' n'est pas en fait une liste, mais plutôt une chaîne (vous verrez les guillemets dans son' repr'). – Blckknght