Si j'ai un fichier texte contenant les nombres suivants:
[[5.078780,5.078993],[7.633073,7.633180],[2.919274,2.919369],[3.410284,3.410314]]
Comment le lire et le stocker dans un tableau, pour qu'il devienne:
5.078780 5.078993 7.633073 7.633180 2.919274 2.919369 3.410284 3.410314
8 Réponses :
with open('blah.txt', 'r') as file:
a=[[l.split(' ')[0], l.split(' ')[1] for l in file.readlines() ]
Vous pouvez simplement réduire les appels fractionnés de 2 à 1 en les fractionnant sur l
Cela devrait fonctionner,
with open('filepath') as f:
array = [line.split() for line in f.readlines()]
Approche:
Avoir une liste de résultats = []
Divisez le texte par des retours à la ligne \ n .
Maintenant dans une boucle for
diviser chaque ligne par un caractère d'espace et attribuer à un tuple
ajouter un tuple à la liste de résultats
Je m'abstiens d'écrire du code ici pour vous permettre de le résoudre.
[[5.07878, 5.078993], [7.633073, 7.63318], [2.919274, 2.919369], [3.410284, 3.410314]]
C'est la bonne réponse :)
Peut utiliser map pour améliorer la lisibilité
Cela devrait faire
with open ("data.txt", "r") as myfile:
data=myfile.readlines()
for i in range(len(data)):
data[i]=data[i].split()
Python fournit le module parfait pour cela, il s'appelle csv :
print(csv_to_array('test.csv', delimiter=';'))
Si vous avez plus tard un fichier avec un séparateur de champ différent, dites ";", il vous suffira alors de changer l'appel en:
import csv
def csv_to_array(file_name, **kwargs):
with open(file_name) as csvfile:
reader = csv.reader(csvfile, **kwargs)
return [list(map(float, row)) for row in reader]
print(csv_to_array('test.csv'))
Notez que si vous ne vous souciez pas d'importer numpy alors cette solution est encore meilleure.
Vous voulez d'abord récupérer le contenu du fichier dans un tableau de chaînes (chaque chaîne est une ligne du fichier)
avec open ("myfile.txt", 'r') comme f: file_content = f.readlines ()
Reportez-vous à la documentation ouverte pour en savoir plus: https://docs.python.org/3/library/functions.html#open
Ensuite, vous voulez créer une liste p >
content_list = [s.split(' ') for s in file_content]
Et puis vous voulez le remplir avec chaque chaîne, quand chaque chaîne doit être divisée avec un espace (en utilisant la fonction split () ) qui fait une liste avec les deux valeurs et ajoutez-le à content_list , utilisez une boucle for!
for line in file_content:
values = line.split(' ') # split the line at the space
content_list.append(values)
Au fait, cela peut être simplifié avec un Compréhension de la liste :
content_list = []
Pour convertir à ce format exact:
[[5.07878, 5.078993], [7.633073, 7.63318], [2.919274, 2.919369], [3.410284, 3.410314]]
renvoie:
with open('filepath', 'r') as f:
raw = f.read()
arr = [[float(j) for j in i.split(' ')] for i in raw.splitlines()]
print arr
Qu'est-ce que tu as essayé jusque-là? Une idée des fonctions pertinentes à utiliser, etc.? Essayez de diviser le problème en deux parties: lire les données d'un fichier et formater les données.