|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - NRM
Páginas: 1 [2] 3 4 ... 12
27
« en: Jueves 25 de Septiembre de 2008, 07:40 »
Hola!, les cuento cual es el problema... Necesito procesar un archivo xml de 500 MB en python, leyendo en la web encontre que libxml2 era apto para cosas grandes. Pero no es asi... ya que en una maquina con 2 G no lo puede procesar, y en un cluster demora 6 horas, necesito urgente si alguien conoce que puedo usar para que no ocupe tanta memoria y para que termine rapido. Gracias! Yo tuve el mismo problema hace un tiempo atras, por lo tanto te voy a comentar mi experiencia. Los archivos xml que tenia que procesar eran de alrededor de 200MB y cuando los procesaba me consumian mucha memoria. Despues de investigar note que hay diferentes formas de parsear un xml. Seguramente lo que te esta ocurriendo es lo mismo que me ocurrio a mi, yo utilice DOM[1] para procesar el xml. El problema es que DOM para procesar el archivo genera un modelo de objetos a partir del xml, por lo tanto en mi caso iba a utilizar mas de 200MB para poder armar el modelo en memoria. Buscando ayuda encontre otra alternativa llamada SAX[2]. Este en vez de cargar todo en memoria utiliza una api event-driven, que llama metodos segun se abra o cierre un tag. Por lo tanto SAX podria ser la solucion para tu problema. Aca pongo un ejemplo que es bastante auto explicativo, espero te sirva. import sys from xml.sax import make_parser, handler class FancyCounter(handler.ContentHandler): def __init__(self): self._elems = 0 self._attrs = 0 self._elem_types = {} self._attr_types = {} def startElement(self, name, attrs): self._elems = self._elems + 1 self._attrs = self._attrs + len(attrs) self._elem_types[name] = self._elem_types.get(name, 0) + 1 for name in attrs.keys(): self._attr_types[name] = self._attr_types.get(name, 0) + 1 def endDocument(self): print "There were", self._elems, "elements." print "There were", self._attrs, "attributes." print "---ELEMENT TYPES" for pair in self._elem_types.items(): print "%20s %d" % pair print "---ATTRIBUTE TYPES" for pair in self._attr_types.items(): print "%20s %d" % pair parser = make_parser() parser.setContentHandler(FancyCounter()) parser.parse(sys.argv[1])
Saludos nrm [1] - http://en.wikipedia.org/wiki/Document_Object_Model[2] - http://en.wikipedia.org/wiki/Simple_API_for_XML
28
« en: Sábado 19 de Julio de 2008, 09:03 »
Hola precisamente me gustaŕia saber si usando urlretrieve yo puedo hacer que el archivo se descargue cada cierto tiempo ya que el archivo que necesito descargar se actualiza cada media hora. tambien podrias usar sleep dentro de un while entre muchas otras opciones. nrm
30
« en: Miércoles 25 de Junio de 2008, 06:32 »
lo que te bajaste seguramente sea la iso, la debes grabar en un cd y bootear con ese cd. despues la instalacion es bastante simple e intuitiva. las particiones las puedes hacer desde la instalacion, pero si deberias ya tener hecho un resize de tu particion o tener espacio libre.
saludos
nrm
31
« en: Miércoles 20 de Febrero de 2008, 23:01 »
yo en mi caso utilizo vi en unix y pywin32 en windows para editar. en el caso de las librerias, depende de lo que quieras hacer y como lo quieras hacer.
saludos
nrm
32
« en: Martes 19 de Febrero de 2008, 22:53 »
espero que te guste el lenguaje y ante cualquier duda, puedes preguntar aqui.
saludos
nrm
33
« en: Jueves 7 de Febrero de 2008, 00:55 »
Este sub-foro solo es para hacer consultas de python. Me parece que debes consultar en otro lado.
nrm
pd: este mensaje se autodestruira (ya que no debe estar aca).
34
« en: Jueves 17 de Enero de 2008, 03:42 »
Esta vivo¡¡¡¡¡¡
muchas gracias ya funciona, pero solo tengo una pregunta, ¿cual era el error? por que tuve que agregar esa linea al principio del codigo
¿tendran algun documento donde venga como poder solucionar este tipo de errores?
muchas gracias el error era que estabas utilizando caracteres con un encoding no estandar, para solucionarle le definimos que utilize el encondig iso-8859-15 (seguramente estabas utilizando un caracter con acento, ñ, etc). los errores que generalmente uno obtiene en python son simples de entender y de no entenderlo puedes buscar en la red (hay mucha informacion de python). sino puedes consultar en el foro (aunque siempre es recomendable buscar un poco antes). la documentacion de python esta en ingles, sin embargo se que hay algunas versiones traducidas al español (no tengo el link a mano). saludos nrm pd: siempre que escribas alguna consulta en el foro, es recomendable que pongas el codigo que genera el error o por lo menos la linea donde este se encuentra.
35
« en: Miércoles 16 de Enero de 2008, 03:59 »
proba agregando esta linea al principio del codigo. # -*- coding: iso-8859-15 -*-
siempre que tengas porblemas como estos, es necesario que publiques el codigo o parte de este para poder asi ayudarte. saludos nrm
36
« en: Lunes 14 de Enero de 2008, 03:49 »
podes agregar el siguiente codigo para que no se cierre la consola. raw_input("presione enter para salir...")
saludos nrm
37
« en: Jueves 10 de Enero de 2008, 04:37 »
aca esta el codigo con algunas modificaciones, tu consulta esta resuelta dentro del metodo "buscar_receta_con_ingrediente". class Recetas: def __init__(self, nombre): self.nombre_plato = nombre self.ingredientes_solidos = [] self.ingredientes_liquidos = [] def proporcionar_ingredientes_solidos(self, solidos): self.ingredientes_solidos.append(solidos) def proporcionar_ingredientes_liquidos(self, liquidos): self.ingredientes_liquidos.append(liquidos) def buscar_receta_con_ingredientes(self, ingrediente): for elemento in self.ingredientes_liquidos: if elemento == ingrediente: print self.nombre_plato break for elemento in self.ingredientes_solidos: if elemento == ingrediente: print self.nombre_plato break def __str__(self): representacion = "NOMBRE DEL PLATO: " + self.nombre_plato + '\n' representacion += "INGREDIENTES: -Solidos-: " for solidos in self.ingredientes_solidos: representacion += solidos + ', ' representacion += "-Liquidos-: " for liquidos in self.ingredientes_liquidos: representacion += liquidos + ', ' return representacion if __name__ == "__main__": a = Recetas("Tarta_de_Manzana") a.proporcionar_ingredientes_solidos("manteca") a.proporcionar_ingredientes_solidos("turron") a.proporcionar_ingredientes_liquidos("leche") a.buscar_receta_con_ingredientes("leche")
me parece que hay mejores formas de resolver este problema y no usar 2 for, pero esta es la mas simple de hacer sin modificar mucho el codigo de la clase. con respecto a lo del color depende de la terminal que utilices, en linux se puede hacer, en windows no sabria decirte. te recomiendo que utilices variables que no contengan caracteres con tildes, tambien te recomendaria que utilices "self" en vez de propio. esto te va a ayudar a que otros programadores puedan leer el codigo mas facilmente y cuando pongas codigo en el foro intenta utilizar el tag CODE para una mejor lectura. saludos nrm
38
« en: Martes 8 de Enero de 2008, 03:10 »
El moacho declara propio, como la variable self, que vienen en las funciones o en los métodos y constructores de las clases, eso es lo que entiendo.
si, propio es "eso" q siempre se pone self se utiliza en el caso de los metodos y no de las funciones. si el codigo que pusiste es parte de una clase deberias poner el codigo completo. nrm
39
« en: Sábado 5 de Enero de 2008, 15:55 »
hola,
para ayudarte mejor necesitaria saber de que tipo es "propio". y si el codigo no es muy largo y podes ponerlo todo, mejor.
saludos
nrm
40
« en: Jueves 6 de Diciembre de 2007, 05:39 »
en este momento solo se me ocurre esta forma. output = "" fdi = open("c:\\note.txt", "r") for line in fdi: if line.strip() != "line 2": output += line fdi.close() fdo = open("c:\\note.txt", "w") fdo.write(output) fdo.close()
como algo extra, te recomiendo que uses el modulo cmd[1] para hacer scripts que tengan un sistema de menus como el que pusiste arriba. nrm [1] - http://docs.python.org/lib/module-cmd.html
41
« en: Martes 20 de Noviembre de 2007, 04:50 »
Hola, fijate si esto te ayuda un poco.
import sys def leer_archivo(): try: arch = open("/home/joaco/programacion/linux/palabras.txt") except IOError: print "Archivo no encontrado." sys.exit(1) # inicializamos el diccionario correspondencias = {} # una de las tantas maneras de crear un diccionario correspondencias=dict([(linea[:-1].split()[0], linea[:-1].split()[1:len(linea)]) for linea in arch.readlines()]) return correspondencias if __name__ == "__main__": d = leer_archivo() for val, abr in d.iteritems(): if sys.argv[1] in abr: print val
No lo probe con un archivo grande, si queres pasame el tuyo y lo pruebo.
Saludos. Por otro lado, tengo un archivo plano (de 450 mil linead) en el que tengo una lista en la que el pirimer valor en de cada linea corresponde a un texto estandarizado al que corresponden el resto de los valores en esa misma linea, algo como lo siguiente: "HERNANDEZ, HDZ. HDZ, HNDZ, HRDEZ, HRNDEZ" "MARIA, MA., MA" "FRANCISCO, FCO., FRCISCO,"
generando datos random cercanos a las 475000 lineas y armando un diccionario con estos me consumio cerca de 124 megas de ram. no se si sea la mejor solucion nrm
42
« en: Martes 6 de Noviembre de 2007, 04:26 »
44
« en: Miércoles 31 de Octubre de 2007, 01:56 »
el programa procesa un entrada de datos a la vez? existe la posibilidad de que te pases a Python 2.5?
nrm
45
« en: Miércoles 17 de Octubre de 2007, 02:03 »
eey, gracias por tu respuesta. Te comento que de hecho ya había pensado en utilizar un diccionario, el problema es que los dicconarios son en formato [key] --> [value] y en este caso la parte de [value] es de uno o más valores y también está el hecho de que estamos hablando de un diccionario que es de mas de un millón de registros. Podría usar una base de datos, pero no es posible
jejeje como ven? alguna idea?
Saludotes Podrías poner algunos datos de ejemplo para tener una mejor idea? Estas usando Python 2.5? nrm
46
« en: Martes 16 de Octubre de 2007, 05:57 »
¿Existe alguna forma de que al momento de ejecutar Python, este cargue una variable que pueda usar para cualquier programa?¿Hay alguna forma de que mi programa solo lea el archivo de texto una sola vez? hola, bienvenido al foro. si comprendí bien tu problema esta en que lees el archivo cada vez que necesitas remplazar una abreviación, de ser este el problema, yo te recomendaría que cargues el archivo en un set o diccionario con todos los valores de las abreviaciones(esto asumiendo que son del tipo key, value). después solo deberías usar ese diccionario que esta cargado en memoria. espero que te sea útil y disculpa la tardanza de la respuesta.
47
« en: Viernes 3 de Agosto de 2007, 06:41 »
si puedes subir el codigo que se encarga de mostrar las fotos y dar algunos datos sobre estas(size, resolution, etc), seria de gran utilidad.
saludos
nrm
48
« en: Miércoles 25 de Julio de 2007, 04:24 »
Aca tenes un link[1] con el sample que viene en la libreria. Espero te sirva. nrm [1] - http://g.slyip.com/?f=12294
49
« en: Jueves 19 de Julio de 2007, 06:28 »
definitivamente voto a favor de pygame, creo que seria la mejor eleccion.
50
« en: Domingo 1 de Julio de 2007, 22:55 »
Necesitarla un poco mas de información para poder ayudarte. Como por ejemplo en donde esta ese formulario, en la web(mod_python, turbogears, etc), en una gui(gtk, qt, etc), otros.
Saludos
nm
Páginas: 1 [2] 3 4 ... 12
|
|
|