functions - reverse python 3
Python-"Struct arrays" (9)
Me gustaría tener una estructura para cada línea que encuentro en un archivo de texto. (Así que sí, básicamente quiero definir mi estructura, luego contar líneas y completar mis estructuras).
En C ++, C # está bien. Pero siempre estoy perdido en Python.
Mis estructuras se verían como:
struct[0].name = "foo"
struct[0].place = "Shop"
struct[1].name = "bar"
struct[1].place = "Home"
Y así.
(Perdón por la pregunta aburrida, espero que otros novatos (como yo) la encuentren útil).
Por supuesto, siéntase libre de editar la pregunta (título) para reflejar la realidad.
¿Qué tal una lista de dictados?
mydictlist = [{"name":"foo", "place":"Shop"},
{"name":"bar", "place":"Home"}]
Entonces puedes hacer
>>> mydictlist[0]["name"]
''foo''
>>> mydictlist[1]["place"]
''Home''
y así...
Usando su archivo de muestra:
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]})
te dio:
[{''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''}
...]
Depende de lo que tengas como datos.
Si todo lo que desea es almacenar nombres y lugares como una cadena, sugeriría:
Una lista de los timbres nombrados [(name="foo", place="Shop"), (name="bar", place="Home")]
Desea crear una class que contenga campos de name
y place
.
class Baz():
"Stores name and place pairs"
def __init__(self, name, place):
self.name = name
self.place = place
Entonces usarías una list de instancias de esa clase.
my_foos = []
my_foos.append(Baz("foo", "Shop"))
my_foos.append(Baz("bar", "Home"))
Ver también: clases (del tutorial de Python) .
No veo por qué tomar tanto dolor.
clase su_estructura ():
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
Para casi todos los casos, una lista de Python es análoga a una matriz C. Python tiene un módulo de array
, pero es una envoltura delgada alrededor de las matrices C reales, por lo que no usaría eso a menos que necesite exponer algo a / desde C.
Además, una estructura se puede representar fácilmente como un objeto. Algo como:
class Data(object):
def __init__(self, name, place):
self.name = name
self.place = place
Luego desea recorrer el archivo, línea por línea, y rellenar:
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
Ese debería ser un punto de partida suficiente para que te muevas y te ayude a entender cómo realizar operaciones básicas de archivo / clase / lista.
Para eso son las tuplas con nombre.
Podrías usar un dict o hacer una clase pequeña.
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"))
>>> s = [{''name'': ''foo'', ''place'': ''shop''}, {''name'': ''bar'', ''place'': ''home''}]
>>> s[0][''name'']
''foo''
Además, recomendaría no nombrarlo ''struct'' en python ya que es un módulo de python.