[Python] Hilo general

Kaiserlau

#1500 desde lab directamente.

pd: si es gordo IDE xd

1
hda

En Jupiter la declaración init no tiene sentido, a mi modo de ver. Está bien para autocontener scripts por si los reutilizas en otras partes. Es una "buena práctica".

Yo uso jupyterlab, también, porque va muy fino. Y para Python uso Spyder, la consola interactiva es fundamental para mí.

He intentando/estoy intentando migrar o simultanear a Visual Studio Code por su tremenda versatilidad (mueve muy bien jupyter también), pero me cuesta por la carencia de la IPython console (aunque usa IPython para rular jupyter, si no me confundo).

2 2 respuestas
Kaiserlau

#1502 Depende también lo que hagas, no se, si estas haciendo cosas de backend en flask o lo que sea no tendría mucho sentido usar lab, pero si por ejemplo para hacer alguna cosilla separada que luego quieres implementar en una api o yo que se xd. A mi como herramienta me parece imprescindible para picotear. Para lo ultimo que lo he usado mas o menos en serio a sido con cv2 y tesseract xd (sacar mierda de un juego xd), y luego hacerme un servicio. Si lo hago solo con visual, en vez de tardar media tarde, a saber..

1 respuesta
hda

#1503 tesseract está chulo, aunque el ocr tiene un acierto un poco pobre... por lo menos en un proyecto personal que hice sobre portadas de periódicos XD

Sí, estoy de acuerdo contigo, pero la verdad es que VSCode ofrece bastante finura...

2 respuestas
Kaiserlau

#1504 Por suerte no tuve que tocar mucho xd fue like magic.

telemaco103

#1502 Team Spyder por aquí también. Me han intentado convencer de ir a VSC pero no me llama, Spyder 4ever jajaja

1
Exor720

No se puede integrar el spyder terminal en vscode con pypi? A lo mejor consigues lo que quieres. Se que se pueden utilizar distintos terminales en el vscode, wsl, powershell, etc.. #1504

Pero no tengo mucha idea del tema tampoco.

1 respuesta
Kaiserlau

#1507 seguro que se puede, pero pasa como con ATOM, al final es tiempo en ponerlo y si no va fino pues :see_no_evil:

Y ya que estoy, alguien usando ATOM, ya va fino? me acuerdo de que carraspeaba bastante.

hda

Estoy contento, acabo de hacer #1425 de nuevo para unas mierdas personales y ha ido suave.

Situación: del año 2003 al 2010 tuve un blog personal privado en una web. He pensado oportuno que estaría bien extraer todas las entradas del diario para llevarlas a mi obsidian, como recuerdo y... a saber qué puedo sacar.

Pues bien, una vez en la web, no tienen una manera sencilla de extraer todas las entradas del diario. Solo permiten exportar manualmente mes a mes en csv o en xml. ¿Solución? Capturar el cURL del post de un mes, enchufar los headers en request e ir modificando el payload con todo el span temporal en un for.

Ahora tendré que hacerme un código para exportar una a una las entradas en sus respectivas notas markdown formateando los tags y el contenido. ¡Qué bien!

PD: Ya sé que el try catch es feote, pero que vamos, no quería gastar tiempo es esto. XDD

Edit: Ya he crado un parser para exportar cada una de las entradas del diario a markdown e importarlas en mi "Daily Journal" de obsidian:

He tenido que hacer un groupby(by="date") porque ocurre que ha habido varios días con varias entradas. De este modo, voy haciendo un append, línea 49, de entradas para cada día (por si hay más de una).

Tará:

1 2 respuestas
Kaiserlau
#1509hda:

PD: Ya sé que el try catch es feote, pero que vamos, no quería gastar tiempo es esto. XDD

Para nada es feote xd por cierto puedes usar el finally al terminar el try y meter ahi por ejemplo el print o algun task al finalizar la obra.

1 respuesta
werty

a mi el try except me salva muchas veces

por ejemplo si tengo que incrementar una variable aún no definida, algo tipo:
try: a += 1
except: a = 1

si existe la incrementas y si no, la defines. Nice.

1 respuesta
hda

#1510 digo que feote por no controlar el tipo de excepción, que lo meto en saco grande xD
#1511 eso es muy guarro jaja Mejor hacer las cosas bien -> https://stackoverflow.com/a/843293/13439937

1 respuesta
werty

#1512 la diferencia es que cuando la variable ya exista, directamente hace un ++, con el if, entiendo que cada iteración tiene que computar el if (y sin tener mucha idea asumo que tendrá peor performance)

buscando he encontrado esto https://www.geeksforgeeks.org/try-except-vs-if-in-python/

1
eondev

#1509 coño que guapo lo de los puntitos xDDD es alguna distirbucion uniforme o que?

1 respuesta
hda

#1514 qué va. Es una de las mejores herramientas que tiene Obsidian (un programa de gestión de conocimiento, a donde he exportado las entradas formateadas del diario). Cada punto representa una nota, y he filtrado solo las notas de diario.

En carácter general (ver imagen abajo): lo poderoso de esa representación es que las notas sean ideas atómicas. Estas ideas pueden interrelacionarse de modo que se llega a crear conocimiento emergente por entre las conexiones. Cuando estás escribiendo una nota vas marcando como "enlazables" los términos que quieras, creando de este modo "notas virtuales" que puedes poblar en ese u en otro momento o enlaces a notas existentes. Creados los enlaces, puedes ver en la representación los clústeres de notas para extraer nuevas ideas. Es una forma poderosísima para escribir de forma creativa (Zettelkasten), ya sean artículos, libros o documentos científicos. O ya sea simplemente para llevar registro de tu conocimiento general y expandir tu pensamiento.

Algún día podría hacer una entrada en mv sobre Obsidian y zettelkasten. Aunque ya hay mucho por la red.

2 1 respuesta
eondev

#1515 qué guapo, pero soy demasiado perro para llevar una herramienta tan disciplinada y tampoco escribo en ningún otro sitio que no sea mv xDDD

Btw como cuaderno de notas y curro puede estar guapo

1
CaNaRy_r00lz

Una pregunta, tengo una lista llamada DIC con 100 diccionarios, y quiero extraer 1 o varios diccionarios y asignarlos a 1 variable cada uno por ejemplo DIC1 y que la eleccion sea random, hasta ahora tengo esto

dic1 = random.choice(list(data))

luego quiero imprimir 3 keys de cada diccionario, pero no se si esta es la forma adecuada

print(dic1["name"],dic1["description"],dic1["country"])

no hay alguna forma de hacerlo estilo
print(dic1["name", "description", "country"]) <- se que asi no funciona, pero solo he conseguido hacerlo funcionar como esta arriba

2 respuestas
hda

#1517 ¿Todos los diccionarios tienen la mismas llaves? Si es así, mi recomendación es que cargues todos los diccionarios en un pandas.dataframe. Las llaves serán las columnas, cada dicionario una fila.

Luego, simplemente eliges que te muestre 3 filas al azar, con todas las comunas o solo las que gustes.

1 respuesta
CaNaRy_r00lz

#1518 Es por un ejercicio, no creo que sea para hacerlo asi como comentas, si todos tienen las mismas keys, nombre, descripcion, pais y numero, entonces es parar comparar ambos diccionarios basados en el numero y ver cual es mas alto de los dos. (no se si se entiende la explicacion)
En mi cabeza pense, bueno pues saco 2 diccionarios randoms enseño las keys que quiero y las "numero" que son las que uso para comparar las uso a parte, pero claro la unica forma que he encontrado de sacar todas las keys es como lo he puesto a base de probar pk online solo veo ejemplos con 1 key

1 respuesta
hda

#1519 ya veo. ¿Quizás con dos for anidados? Con el primero recorres la lista con los tres diccionarios y con el segundo construyes una string recorriendo las keyvalues de cada dicionario.

Igual estoy entendiendo mal el ejercicio o el problema que representa XD

1 respuesta
CaNaRy_r00lz

#1520 si bueno voto mas por que no he sabido explicarlo yo mejor jaja thanks!

Lolerpopler

#1517 lo que planteas está bien, otra alternativa es "random.choices" que te permite elegir varios al azar de una vez, en vez de llamar a "random.choice" 3 veces, que podría resultar en elegir el mismo item ya que no lo eliminas de la lista inicial.

Después iteras sobre los tres items haciendo el Print, lo puedes hacer más limpio con "formatted strings"

print(f"Name: {item[name]}, description: {item[description]} .... ")

Esto asumiendo que todos los diccionarios tienen las mismas claves. Otra opción sería usar "dictionary.get(key)" En caso de que no encuentre la clave devuelve "None" o el valor que pongas tu de default en vez de soltarte una excepción

Pandas me parece "over engineering" para este ejercicio o cualquier cosa que no sean diccionarios masivos

1 respuesta
hda

Se me ocurre dic.values() como argumento a un "".format()

CaNaRy_r00lz

#1522 Si todos tienen las mismas key. Si uso choices en vez de choice luego no puedo imprimirlo como quiero, y la ventaja de como lo tengo es que puedo coger la key "numero" y compararla con la key "numero" de otro diccionario para ver cual tiene mas valor que el otro.
Estos son los diccionarios por ejemplo , pero no quiero que me digais como hacerlo xD solo lo que preguntaba asi sigo rompiendome la cabeza.

Vamos que al final hago Instagram vs CR y gana Instagram pk es mayor que CR en el numero

data = [
    {
        'name': 'Instagram',
        'follower_count': 346,
        'description': 'Social media platform',
        'country': 'United States'
    },
    {
        'name': 'Cristiano Ronaldo',
        'follower_count': 215,
        'description': 'Footballer',
        'country': 'Portugal'
    }]

1 respuesta
Lolerpopler
#1524CaNaRy_r00lz:

Si uso choices en vez de choice luego no puedo imprimirlo como quiero

Por que no ibas a poder? la diferencia (entre otras) es que ".choices" te devuelve una lista de longitud k con elementos seleccionados aleatoriamente de lo que le pases. Si tienes una lista con diccionarios y se la pasas a choices elegira tres diccionarios al hacer y te devolvera una lista.

De todas maneras, una cosa en la que si me he confundido es que el metodo ".choices" tambien podria acabar eligiendote el mismo valor varias veces, el metodo ".sample" te evita esa posibilidad.
Por si quieres leer mas del tema link

1 respuesta
CaNaRy_r00lz

#1525 Me referia a que me da error al imprimir, pero si tengo el problema que me pilla el mismo item hice esto
Cambie la lista a 3 items y 2 se repiten para ver si funcionaba pero me sigue pillando uno repetido supongo que pk es una lista de 3 items, si fuera una de 20 la probabilidad seria mas baja.

oppA = random.choice(list(data))
oppB = random.choice(list(data))
print(oppA)
print(oppB)
if oppA == oppB:
    oppB = random.choice(list(data))

Estoy mirando sample pero no se como hacerlo funcionar. tengo este diccionario

spoiler

y hago esto:
oppA = random.sample(data,1)
oppB = random.sample(data,1)

asi me pilla 2 diccionarios aleatorios, hasta ahi bien pero cuando quiero imprimir como tenia antes

print(f'Compare A: {oppA["name"]},{oppA["description"]},{oppA["country"]}')

print(f'Compare A: {oppA["name"]},{oppA["description"]},{oppA["country"]}')
TypeError: list indices must be integers or slices, not str

me da este error y ya me pierdo ahora no se que hacer o donde mirar para solucionar esto, pk entiendo que me esta devolviendo una lista y dentro el diccionario, y no entiendo pk no me deja imprimirlo.

Perdon si es un error muy simple

2 respuestas
inmor

Por cierto, cual es la diferencia entre usar print normal y usar print con el f y {}

1 respuesta
1mP

Buenas tardes caballeros, existe alguna web de ejercicios que vayan desde lo mas noob hasta lo mas complejo? Sin ser codewars. Busco algo que vaya por niveles, pero que sea un poco mas complejo que los ejercicios de w3schools? No se si lo que pido es mucho o no. O si no algun libro.

1 respuesta
Lolerpopler
#1526CaNaRy_r00lz:

Estoy mirando sample pero no se como hacerlo funcionar. tengo este diccionario

Mirate bien el sample, solo tienes que llamarlo una vez, y pasar dos parametros, el primero la lista de los diccionarios, el segundo el numero de items que quieres que te devuelva.
El error que te esta dando es porque no has leido el metodo bien, "sample" y "choices" a diferencia de "choice" te devuelven una lista, no un elemento.
Te quedaria algo asi

selected_dicts = random.sample(data, 2)
for item in selected_dicts:
    print(f"Compare A: {item['name']}, {item['name']}, {item['name']}")
#1527inmor:

Por cierto, cual es la diferencia entre usar print normal y usar print con el f y {}

La diferencia no esta en el print, esta que usar 'f""' te permite formatear los strings mas comodamente. https://realpython.com/python-f-strings/

1 2 respuestas
CaNaRy_r00lz

#1528 Tienes este curso https://www.mediavida.com/foro/dev/100-days-of-code-the-complete-python-pro-bootcamp-for-2022-679391

#1529 Creo que no me he expresado bien, pk al intentar hacer lo que comentas ahi me hace esto
Compare A: Cristiano Ronaldo,Footballer,Portugal
Compare B: Cristiano Ronaldo,Footballer,Portugal
Compare A: Instagram,Social media platform,United States
Compare B: Instagram,Social media platform,United States

Tengo puesto lo mismo que tu pero añadi CompareB

selected_dicts = random.sample(data,2)
for item in selected_dicts:
    print(f'Compare A: {item["name"]},{item["description"]},{item["country"]}')
    print(f'Compare B: {item["name"]},{item["description"]},{item["country"]}')

tengo que poder comprar seguidores entre ambos y saber cual tiene mas que el otro

3 respuestas