J'aimerais avoir une structure pour chaque ligne trouvée dans un fichier texte. (Donc oui, en gros, je veux définir ma structure, puis compter les lignes et remplir mes structures.)
En C++, C # c'est bien. Mais je suis toujours perdu en Python.
Ma structure ressemblerait à ceci:
struct[0].name = "foo"
struct[0].place = "Shop"
struct[1].name = "bar"
struct[1].place = "Home"
Etc.
(Désolé pour la question boiteuse, j'espère que d'autres débutants (comme moi) le trouveront utile.)
Bien sûr, n'hésitez pas à modifier la question (titre) pour refléter la réalité.
C'est à ça que servent les tuples.
Vous voulez créer un class qui contient les champs name
et place
.
class Baz():
"Stores name and place pairs"
def __init__(self, name, place):
self.name = name
self.place = place
Ensuite, vous utiliseriez un list of instances de cette classe.
my_foos = []
my_foos.append(Baz("foo", "Shop"))
my_foos.append(Baz("bar", "Home"))
Voir aussi: classes (tiré du tutoriel Python) .
Que diriez-vous d'une liste de dicts?
mydictlist = [{"name":"foo", "place":"Shop"},
{"name":"bar", "place":"Home"}]
Alors tu peux faire
>>> mydictlist[0]["name"]
'foo'
>>> mydictlist[1]["place"]
'Home'
etc...
En utilisant votre exemple de fichier:
mydictlist = []
with open("test.txt") as f:
for line in f:
entries = line.strip().split(" ", 5) # split along spaces max. 5 times
mydictlist.append({"name": entries[0],
"time1": entries[1],
"time2": entries[2],
"etc": entries[5]})
vous donne:
[{'etc': 'Vizfoldrajz EA eloadas 1', 'name': 'Hetfo', 'time2': '10:00', 'time1': '8:00'},
{'etc': 'Termeszetfoldrajzi szintezis EA eloadas 1', 'name': 'Hetfo', 'time2': '14:00', 'time1': '12:00'},
{'etc': 'Scriptnyelvek eloadas 1', 'name': 'Hetfo', 'time2': '16:00', 'time1': '14:00'}
...]
Cela dépend de ce que vous avez comme données.
Si tout ce que vous voulez est de stocker les noms et les lieux sous forme de chaîne, je vous suggère:
Une liste de nommés [(name="foo", place="Shop"), (name="bar", place="Home")]
Dans presque tous les cas, une liste Python est analogue à un tableau C. Python a un module array
, mais il s’agit d’une mince couche de protection autour des tableaux de C, donc je ne l’utiliserai pas à moins d’exposer quelque chose à/de C.
De plus, une structure peut facilement être représentée sous forme d'objet. Quelque chose comme:
class Data(object):
def __init__(self, name, place):
self.name = name
self.place = place
Ensuite, vous souhaitez parcourir le fichier, ligne par ligne, et remplir:
my_list = []
with open("myfile.txt") as f:
for line in f.readlines():
# line is each line in the file
# let's pretend our file structure is "NAME PLACE"
data = line.split() # data[0] = name, data[1] = place
my_list.append(Data(data[0], data[1]))
# my_list now contains objects of class Data, which has members name and place
Cela devrait être un point de départ suffisant pour vous faire bouger et vous aider à comprendre comment effectuer des opérations de base sur les fichiers/classes/listes.
Vous pouvez utiliser un dict ou faire une petite classe.
>>> s = [{'name': 'foo', 'place': 'shop'}, {'name': 'bar', 'place': 'home'}]
>>> s[0]['name']
'foo'
Aussi, je recommanderais de ne pas le nommer 'struct' en python puisqu'il s'agit d'un module python.
Je ne vois pas pourquoi prendre autant de douleur
class your_struct ():
def __init__(self, value, string):
self.num = value
self.string = string
C = [[ your_struct(0,'priyank') for j in range(len(n)) ] for i in
range(len(n)) ]
# for 2-D Matrix
C = [ your_struct(0,'priyank') for j in range(len(n)) ] // for 1-D array
class Struct:
def __init__(self, name, place):
self.name = name
self.place = place
structs = []
structs.append(Struct("foo","bar"))
structs.append(Struct("other_foo","other_bar"))