[Python] Hilo general

0n1x

#389 #390 Muchas gracias por los consejos, intentaré llevarlos a cabo.

Estoy tratando de convertir el string a numérico para que me cuente los valores. Hago lo siguiente:

Pero me sale el siguiente error:

Seguro que es una tonteria, pero nunca había invertido tanto tiempo en algo tan simple, será cosa de la programación xD

1 3 respuestas
mortadelegle

#391 Puede ser que los floats en tu archivo separen los decimales con una coma? Python entiende que un float es del tipo 3.2 , no 3,2.

Por cierto si alguien le quiere echar un vistazo estoy ya terminando mi proyecto de TFG.

Es un lenguaje visual para crear procesos de aprendizaje automatico, esta hecho todo en python (sklearn, numpy para el machine learning y kivy para la parte gráfica).

Podeis encontrarlo en https://github.com/AlvarBer/Persimmon

2 2 respuestas
hache_

#391 diría que es lo que dice #392, haz un encabezadoNulos = nulosLIneas[12].replace(',','.') que te cambiará la coma por punto y prueba nuevamente. Como te dijeron antes, en python solo se suele escribir en camelCase los nombres de clase, las variables, métodos/funciones, ... se suelen escribir en snake_case, todo minúscula y separando palabras por guines.

#392

Tiene muy buena pinta, me lo guardo para echarle un vistazo el martes que ya habré acabado los exames y estaré solo con el TFG, pero en mi caso, aun me falta mucho xD.

HeXaN

#392 Madre, qué maravilla. Me ha recordado un montón a KNIME. Buen trabajo.

B

#391 Puedes usar la etiqueta code para escribir el código y así poder visualizarlo mejor :)

BOARD_SIZE = 8

class BailOut(Exception):
    pass

def validate(queens):
    left = right = col = queens[-1]
    for r in reversed(queens[:-1]):
        left, right = left-1, right+1
        if r in (left, col, right):
            raise BailOut

def add_queen(queens):
    for i in range(BOARD_SIZE):
        test_queens = queens + [i]
        try:
            validate(test_queens)
            if len(test_queens) == BOARD_SIZE:
                return test_queens
            else:
                return add_queen(test_queens)
        except BailOut:
            pass
    raise BailOut

queens = add_queen([])
print queens
print "\n".join(". "*q + "Q " + ". "*(BOARD_SIZE-q-1) for q in queens)
1 respuesta
E

#395 muerte a tu python 2

Traber

¡Buenas gente! Por motivos de dar cierta soltura a un proyecto que tengo, de una de las partes voy a tener que mover el código de PHP a Python, es un servicio en segundo plano que ahora corre en CRON pero que sería ideal que funcionase en un servicio como tal, y en vez de meterme a hacerlo en C/C++ o similares, pues tiro por Python que ya me he peleado con él para chorradillas varias.

Explicación tocha insaid

TLDR: Estoy refactorizando un servicio de PHP a Python para añadir concurrencia y quiero saber algunas opciones de tuneo (hilos máximos por proceso), recomendación de algún sistema de "i18n" y otro de plantillas de texto o html, así como algunos consejos o referencias obligadas de Python 3 para no meter la gamba xD.

1 respuesta
hache_

#397

Te recomiendo que le eches un ojo a multiprocessing en lugar de threads, basicamente porque python no es que gestione muy bien los hilos y si tienes un daemon que lance threads, como alguno tenga un pico de consumo de memoria elevado se la va a reservar y luego no la libera, con multiprocessing es bastante similar la forma de desarrollar y creo que es más eficiente a menos.

Para multilenguaje lo más recurrido y que conozco es gettext, es simple y funciona xD.

Como sistema de plantillas el más utilizado diría que es jinja2 y a mi el que más me gusta.

Libros... Pues hace tiempo que no toco ninguno de sintaxis, lo que si te puedo decir es que si tienes experiencia programando empieces con "python para todos" de mundo geek que te ayudará a familiarizarte con ciertas cosas del lenguaje y luego el último libro que he leído que sabiendo ya programar y la sintaxis seguro encuentras de tu agrado es "The hacker's guide to python".

Un saludo.

1 respuesta
Traber

#398

A ver, con respecto a multiprocessing vs multithreading, la verdad es que por el momento me interesa que sea multithreading, y es más, tengo ya bastante avanzado con python el sistema con daemon y con el multihilo (comprueba las webs de manera paralela, aún quedan cosas como las notificaciones y algunas cosas más, pero lo básico sobre lo que irá el resto está hecho ya xD), lo que sí que me anoto es lo de liberar los recursos, porque sí me parecía MUY RARO que los hilos no se fuesen reciclando, en el sistema de logging tengo que aparezca el nombre del hilo (Thread-1, Thread-2 [...], Thread-8) pero me llamaba la atención cuando al rato andaba por el Thread-2183 o así xD. He visto que efectivamente Python no libera los hilos y se quedan recursos en memoria, que hay que hacerlo a manopla... si no hay más remedio tiraré al multiprocessing pero en principio preferiría multithreading.

Con lo de gettext es que en PHP ya me parece una puta mierda, vengo del maravilloso sistema de codeigniter de:

$this->lang->line('error_msg')

Donde 'error_msg' es una variable de idioma que puede tener 8 líneas si quiero y que con gettext es infernal, no quiero pasar por gettext otra vez T.T.
He visto este artículo sobre internacionalización en Python y el programa "Poedit" parece interesante para gestionar todas esas traducciones, supongo que por el momento es con lo que tiraré xD: https://inventwithpython.com/blog/2014/12/20/translate-your-python-3-program-with-the-gettext-module/

He visto jinja2 un poco por encima y me ha gustado lo que he visto, aunque me ha echado para atrás ver esto en la documentación oficial:

Experimental Python 3 Support

Y justo estoy tirando con Python 3.6, así que... Probaré con jinja2 a ver que tal, espero que solo sea un aviso para cubrirse el culo y que funcione igual de bien que en Python 2 xD.

Tomo nota de los libros también, muchas gracias ^.

1 respuesta
Lolerpopler

Alguno conoce alguna buena forma de identifar mime types con python? Sin leer la extension vamos

1 respuesta
HeXaN

#400 python-magic.

1 respuesta
Lolerpopler

#401 Eso he mirado ya, pero mi problema es que tiene que funcionar tambien en windows, y me esta resultando un poco confuso siguiendo la documentacion

1 respuesta
HeXaN

#402 Windows + Python = coñazo. Ya nos dirás si lo consigues xD

hache_

#399

Si, jinja con python 3 está aun algo verde, pero supongo que es cuestión de tiempo, cada vez se programa más en python 3.

En cuanto a lo de liberar a mano... ya te digo que turbio, no funciona el garbage collector, ni del, ni nada, reserva memoria permamente, concretamente el máximo que haya necesitado en algún momento. A nosotros nos dio muchos problemas eso en su día y hubo que pasarse a multiprocessing, pero bueno, si no llegas a picos muy grandes de memoria igual apañas, en nuestro caso llegaba a reservarse para el 2GB de memoria e imaginate las liadas que puede haber con picos de carga y el SO utilizando swap y matando procesos que considera menores xDD.

Un saludo.

1 mes después
Phatality

#386 para leer csv usa mejor el módulo pandas. Con una línealo tendrías resuelto:

pandas.read_csv(path)

1
NoixeN

#386 Mirate esto para parsear el csv: https://docs.python.org/3/library/csv.html#csv.reader tienes un ejemplo ahí. Lo pasas todo a una lista de diccionarios o tuplas y sobre eso vas sacando los datos que quieras.

1 mes después
HeXaN

Dejo esto por aquí y me voy: https://github.com/JJ/1line-py

4
3 meses después
HeXaN

Recién salido del horno: https://research.google.com/colaboratory/

3 1 respuesta
Fyn4r

#408 Wo, eso es una especie de R-Markdown para Python colaborativo? mola

1 respuesta
HeXaN

#409 ¿No conocías Jupyter? Mola un montón.

1 respuesta
Fyn4r

#410 No, y me siento bastante gilipollas ahora mismo xD

1 respuesta
HeXaN

#411 Pues ya sabes: pipenv install jupyter y a disfrutar.

1
24 días después
HeXaN

He estado hoy pasando de beautifulsoup4 + lxml a selectolax y he reducido a la mitad (en algunos casos incluso más) los tiempos de scrap/parseo de páginas web. Para que os hagáis una idea, se come un hilo de 275 páginas en cinco segundos cuando antes no bajaba de los diez. Os dejo el proyecto por si queréis echarle un ojo y probarlo: https://github.com/rushter/selectolax

1 1 respuesta
Zeroner

#413 simplemente el parsing del HTML? o te refieres a también realizar las requests?

1 respuesta
HeXaN

#414 Las peticiones no las he contado porque en ambos casos son las mismas.

1 respuesta
Zeroner

#415 el tema es que en estos casos las peticiones son realmente todo. Veo que en el benchmark leen de fs, que si tiene sentido: https://github.com/rushter/selectolax/blob/master/examples/benchmark.py

Interesante selectolax, pena que no parezca soportar xpath.

1 respuesta
HeXaN

#416 He hecho también tests teniendo el HTML descargado y la ganancia de velocidad es importante.

selectolax execute time: 0.007396999999999987 seconds
beautifulsoup4 + lxml time: 0.07173399999999999 seconds

Y vamos, mejor prueba que portar un código completo y ver que tarda la mitad en todos los casos no hay xD

boqueron

¿Alguno sabe algun plugin o algun IDE bueno para crear UML a partir de varios ficheros python que forman un proyecto?

Con Pycharm viene uno pero te saca los diagramas de clase muy bonitos pero si las clases estan todas dentro del mismo fichero, yo he usado varios ficheros python para cada una de las clases.

Lo tenia que hacer asi.

1 mes después
HeXaN

Os dejo por aquí un artículo MUY interesante:

CoffeeMiner: Hacking WiFi to inject cryptocurrency miner to HTML requests
http://arnaucode.com/blog/coffeeminer-hacking-wifi-cryptocurrency-miner.html

3
1 mes después
B

hay alguna manera de que se mande desde un script a la consola de ipython un codigo de latex para que se muestre en ipython?

import sympy as sympy
from sympy import init_printing
from sympy import Symbol, latex
from IPython.display import display, Math, Markdown, Latex, display_markdown
init_printing(use_latex=True)

x=sympy.Symbol('x')
c=sympy.latex(eval('2**x'))
print(sympy.printing.latex(eval('2**x')))
display(Latex(c))

eso es lo que tengo puesto pero luego al ejecutar en el terminal de ipython me sale esto
<IPython.core.display.Latex object>

son casi las 5,30 de la mañana y no me sale xd

edit.
wow vaya, si cambio la ultima linea por
display(Math(c))
ya si va, venga buenas noches