From pych3m4 en gmail.com Wed Jul 1 04:41:50 2020 From: pych3m4 en gmail.com (Chema Cortes) Date: Wed, 1 Jul 2020 10:41:50 +0200 Subject: [Python-es] [Consulta] Kivi, archivo .kv In-Reply-To: References: Message-ID: El mié., 24 jun. 2020 a las 1:09, Lemarchand Barker (< lemarchand8679 en gmail.com>) escribió: > Hola, estoy viendo a ver si puedo amigarme con algún framework. Si bien > uso algo básico de tkinter, estoy viendo kivy y tengo una duda que es > sencilla. > Tengo el código en .py y ahora siguiendo el tuto tuve que crear un archivo > .kv, mi pregunta es sobre esto, el .kv; a grandes rasgos; sería como la > hoja de estilo del html? Gracias > > Por lo que pone en la documentación, Kv es un lenguaje para *declarar *los widgets que usa tu aplicación y enlazarlos con los *callbacks *definidos en tu código python. Tiene pintas de SCSS, pero hace más cosas. Técnicamente, es un DSL (*Domain-specific Language*) similar al lenguaje yaml con código python empotrado. Varios frameworks UI utilizan lenguajes declarativos que facilitan el diseño visual y su desacople del resto del código. Lo normal es cargar estos ficheros declarativos al arrancar la aplicación para crear los widgets*. *De este modo, se puede modificar el diseño sin tocar el código de la aplicación. Saludos. -- Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": https://blog.ch3m4.org Buscador Python Hispano: http://busca.ch3m4.org ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 1 07:31:09 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Wed, 01 Jul 2020 08:31:09 -0300 Subject: [Python-es] [Consulta] Kivi, archivo .kv In-Reply-To: Message-ID: <5efc7401.1c69fb81.1441d.d6a7@mx.google.com> Muchas graciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Chema Cortes Fecha: 1/7/20 05:43 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Kivi, archivo .kv El mié., 24 jun. 2020 a las 1:09, Lemarchand Barker () escribió:Hola, estoy viendo a ver si puedo amigarme con algún framework. Si bien uso algo básico de tkinter, estoy viendo kivy y tengo una duda que es sencilla.Tengo el código en .py y ahora siguiendo el tuto tuve que crear un archivo .kv, mi pregunta es sobre esto, el .kv; a grandes rasgos; sería como la hoja de estilo del html? Gracias Por lo que pone en la documentación, Kv es un lenguaje para declarar los widgets que usa tu aplicación y enlazarlos con los callbacks definidos en tu código python. Tiene pintas de SCSS, pero hace más cosas. Técnicamente, es un DSL (Domain-specific Language) similar al lenguaje yaml con código python empotrado.Varios frameworks UI utilizan lenguajes declarativos que facilitan el diseño visual y su desacople del resto del código. Lo normal es cargar estos ficheros declarativos al arrancar la aplicación para crear los widgets. De este modo, se puede modificar el diseño sin tocar el código de la aplicación. Saludos.-- Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": https://blog.ch3m4.orgBuscador Python Hispano: http://busca.ch3m4.org ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From turriano en gmail.com Wed Jul 1 09:08:42 2020 From: turriano en gmail.com (Turriano) Date: Wed, 1 Jul 2020 15:08:42 +0200 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= Message-ID: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Hola y saludos a la lista. Me acuerdo de cuando programaba en Visual Basic y me parecía genial que se tuviese la facilidad de rear un interfae para los programas, a los que sólo restaba poner algo más de código. ¿Sabéis si hay algún sistema parecido para Python en Linux. Se que Visual Studio tiene algo así para windows, pero en Linux no conozco nada. Gracias por todo. From gabofer82 en gmail.com Wed Jul 1 09:39:19 2020 From: gabofer82 en gmail.com (gabriel fernandez) Date: Wed, 1 Jul 2020 10:39:19 -0300 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= In-Reply-To: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> References: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Message-ID: Hola: No hay nada así en GNU/Linux hasta donde sé. Lo más parecido es utilizar algún RAID (que te permite crear las interfaces gráficas) como QT4Designer(Librería gráfica QT) o Glade(librería gráfica GTK). Estos generan archivos que por medio de algunas herramientas podés convertir a código Python y utilizarlos. Te dejo algunos links de ayuda: https://blog.desdelinux.net/desarrollo-de-aplicaciones-con-python-3-glade-y-gtk-3-en-windows/ https://likegeeks.com/es/tutorial-de-pyqt5/ https://medium.com/@hektorprofe/primeros-pasos-en-pyqt-5-y-qt-designer-programas-gr%C3%A1ficos-con-python-6161fba46060 Saludos! El mié., 1 jul. 2020 a las 10:08, Turriano () escribió: > Hola y saludos a la lista. > Me acuerdo de cuando programaba en Visual Basic y me parecía genial que > se tuviese la facilidad de rear un interfae para los programas, a los > que sólo restaba poner algo más de código. > ¿Sabéis si hay algún sistema parecido para Python en Linux. > Se que Visual Studio tiene algo así para windows, pero en Linux no > conozco nada. > Gracias por todo. > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- Gabriel Fernández Desarrollador Web www.openweb.com.uy ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From mlacunza en gmail.com Wed Jul 1 10:01:14 2020 From: mlacunza en gmail.com (Mario Lacunza) Date: Wed, 1 Jul 2020 09:01:14 -0500 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= In-Reply-To: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> References: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Message-ID: Hola Depende de la librería de controles q escojas, para wxpython tienes wxformbuilder Mario Lacunza Enviado desde mi celular El mié., 1 de jul. de 2020 08:09, Turriano escribió: > Hola y saludos a la lista. > Me acuerdo de cuando programaba en Visual Basic y me parecía genial que > se tuviese la facilidad de rear un interfae para los programas, a los > que sólo restaba poner algo más de código. > ¿Sabéis si hay algún sistema parecido para Python en Linux. > Se que Visual Studio tiene algo así para windows, pero en Linux no > conozco nada. > Gracias por todo. > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 1 10:12:33 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Wed, 01 Jul 2020 11:12:33 -0300 Subject: [Python-es] =?iso-8859-1?q?=BFAlg=FAn_sistema_visual_para_progra?= =?iso-8859-1?q?mar_en_Python=3F_=28en_Linux=29?= In-Reply-To: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Message-ID: <5efc99d5.1c69fb81.9c62a.0557@mx.google.com> Hola, no se si te sirve pero está Visual Studio Code y MonoDevelop.SaludosEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Turriano Fecha: 1/7/20 10:09 (GMT-03:00) A: python-es en python.org Asunto: [Python-es] ¿Algún sistema visual para programar en Python? (en Linux) Hola y saludos a la lista.Me acuerdo de cuando programaba en Visual Basic y me parecía genial que se tuviese la facilidad de rear un interfae para los programas, a los que sólo restaba poner algo más de código.¿Sabéis si hay algún sistema parecido para Python en Linux.Se que Visual Studio tiene algo así para windows, pero en Linux no conozco nada.Gracias por todo._______________________________________________Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From francisco.palm en gmail.com Wed Jul 1 15:41:55 2020 From: francisco.palm en gmail.com (Francisco Palm) Date: Wed, 1 Jul 2020 15:41:55 -0400 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= In-Reply-To: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> References: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Message-ID: Buenas noches Por suerte no hay nada igual, sería un error tremendo porque Visual Basic fomenta muchas malas prácticas de programación. Mi recomendación personal para desarrollar aplicaciones de escritorio es QtDesigner, con el que diseñas las interfaces gráficas y luego lo enlazas a tu código Python. Aquí hay un enlace de YouTube https://youtu.be/LaIc4yy6pgM la verdad no lo he visto y no sé que tan bueno será pero por la descripción debería decirte lo básico. En Python hay otras alternativas. Saludos F. Palm El mié., 1 de jul. de 2020 a la(s) 09:09, Turriano (turriano en gmail.com) escribió: > Hola y saludos a la lista. > Me acuerdo de cuando programaba en Visual Basic y me parecía genial que > se tuviese la facilidad de rear un interfae para los programas, a los > que sólo restaba poner algo más de código. > ¿Sabéis si hay algún sistema parecido para Python en Linux. > Se que Visual Studio tiene algo así para windows, pero en Linux no > conozco nada. > Gracias por todo. > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- -------------------------------------- fpalm en mapologo.org.ve francisco.palm en gmail.com cel: +58 +424 7228252 tel: +58 +274 6352001 ---- Debemos ser libres, no para hacer lo que nos plazca, sino libres para comprender muy profundamente nuestros propios instintos e impulsos. K ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From turriano en gmail.com Wed Jul 1 19:15:40 2020 From: turriano en gmail.com (Turriano) Date: Thu, 2 Jul 2020 01:15:40 +0200 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= In-Reply-To: <5efc99d5.1c69fb81.9c62a.0557@mx.google.com> References: <5efc99d5.1c69fb81.9c62a.0557@mx.google.com> Message-ID: <96b6ffd1-278a-7fa5-3182-1a0a45fb6910@gmail.com> Gracias, lomiraré El 1/7/20 a las 16:12, lemarchand8679 escribió: > Hola, no se si te sirve pero está Visual Studio Code y MonoDevelop. > Saludos > > From turriano en gmail.com Wed Jul 1 19:31:06 2020 From: turriano en gmail.com (Turriano) Date: Thu, 2 Jul 2020 01:31:06 +0200 Subject: [Python-es] =?utf-8?q?=C2=BFAlg=C3=BAn_sistema_visual_para_progr?= =?utf-8?q?amar_en_Python=3F_=28en_Linux=29?= In-Reply-To: References: <1917c24c-d011-a7d7-5350-84948b22ada5@gmail.com> Message-ID: <052ac562-fd0f-c35a-d89d-b288a3c07e3a@gmail.com> Gracias! El 1/7/20 a las 21:41, Francisco Palm escribió: > > Buenas noches > > Por suerte no hay nada igual, sería un error tremendo porque Visual > Basic fomenta muchas malas prácticas de programación. > > Mi recomendación personal para desarrollar aplicaciones de escritorio > es QtDesigner, con el que diseñas las interfaces gráficas y luego lo > enlazas a tu código Python. > > Aquí hay un enlace de YouTube https://youtu.be/LaIc4yy6pgM la verdad > no lo he visto y no sé que tan bueno será pero por la descripción > debería decirte lo básico. > > En Python hay otras alternativas. > > Saludos > > F. Palm From lemarchand8679 en gmail.com Thu Jul 2 10:44:25 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 2 Jul 2020 11:44:25 -0300 Subject: [Python-es] [Consulta] KeyError: 'main' Message-ID: Hola, estoy teniendo un inconveniente a la hora de correr un programa. El código es este: base_url = "http://api.openweathermap.org/data/2.5/weather?q=" city_name = input("Ingrese nombre de la ciudad: ") complete_url = base_url + "appid=" + api_key + "&q=" + city_name response = requests.get(complete_url) x = response.json() if x["cod"] != "404": y = x['main'] # y = x["cod"] current_temperature = y["temp"] current_pressure = y["pressure"] current_humidiy = y["humidity"] z = x["weather"] weather_description = z[0]["description"] print( "Temperature (in centigrade unit) = " + str(current_temperature) + "\n atmospheric pressure (in hPa unit) = " + str(current_pressure) + "\n humidity (in percentage) = " + str(current_humidiy) + "\n description = " + str(weather_description) ) else: print(" Ciudad no encontrada ") El problema se da cuando intento ingresar una ciudad. Probé con la mía Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo mismo. La salida es la siguiente: /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py Ingrese nombre de la ciudad: London Traceback (most recent call last): File "/home/raiden/Programacion/weather/tiempo.py", line 18, in y = x['main'] KeyError: 'main' Leí que generalmente ese error se debe a que no encuentra el path o no existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es otro. Es el siguiente: /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py Ingrese nombre de la ciudad: London Traceback (most recent call last): File "/home/raiden/Programacion/weather/tiempo.py", line 20, in current_temperature = y["temp"] TypeError: 'int' object is not subscriptable Asi que por eso comenté la línea como se ve en el código, porque me parece que mi problema es con main. El código original es este: Python-find-current-weather-of-any-city-using-openweathermap-api/ Saludos ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 2 10:59:34 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 2 Jul 2020 11:59:34 -0300 Subject: [Python-es] [Consulta] KeyError: 'main' In-Reply-To: References: Message-ID: Ya logré solucionarlo, ahora tengo que cambiar para que la temperatura la muestre en celsius. Cerrado :) El jue., 2 jul. 2020 a las 11:44, Lemarchand Barker (< lemarchand8679 en gmail.com>) escribió: > Hola, estoy teniendo un inconveniente a la hora de correr un programa. > > El código es este: > > base_url = "http://api.openweathermap.org/data/2.5/weather?q=" > > city_name = input("Ingrese nombre de la ciudad: ") > > complete_url = base_url + "appid=" + api_key + "&q=" + city_name > > response = requests.get(complete_url) > > x = response.json() > > if x["cod"] != "404": > y = x['main'] > # y = x["cod"] > current_temperature = y["temp"] > current_pressure = y["pressure"] > current_humidiy = y["humidity"] > z = x["weather"] > weather_description = z[0]["description"] > > print( > "Temperature (in centigrade unit) = " + > str(current_temperature) + > "\n atmospheric pressure (in hPa unit) = " + > str(current_pressure) + > "\n humidity (in percentage) = " + > str(current_humidiy) + > "\n description = " + > str(weather_description) > ) > else: > print(" Ciudad no encontrada ") > > El problema se da cuando intento ingresar una ciudad. Probé con la mía > Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo > mismo. > La salida es la siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py > Ingrese nombre de la ciudad: London > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/tiempo.py", line 18, in > y = x['main'] > KeyError: 'main' > > Leí que generalmente ese error se debe a que no encuentra el path o no > existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es > otro. Es el siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py > Ingrese nombre de la ciudad: London > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/tiempo.py", line 20, in > current_temperature = y["temp"] > TypeError: 'int' object is not subscriptable > > Asi que por eso comenté la línea como se ve en el código, porque me parece > que mi problema es con main. > > El código original es este: > Python-find-current-weather-of-any-city-using-openweathermap-api/ > > > Saludos > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 2 16:00:19 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Thu, 02 Jul 2020 17:00:19 -0300 Subject: [Python-es] [Consulta] Sobre keyerror Message-ID: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Hola, había escrito para comentar que había solucionado el inconveniente de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 para hacer algunas modificaciones, me tira ese error al introducir una ciudad, y si hago un copy-paste del código funciona y la verdad no se por qué, alguna idea? GraciasEnviado desde mi smartphone Samsung Galaxy. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From gerardo.diez.garcia en gmail.com Thu Jul 2 17:18:49 2020 From: gerardo.diez.garcia en gmail.com (Gerardo Diez) Date: Thu, 2 Jul 2020 23:18:49 +0200 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Hola, No soy precisamente un experto, pero yo normalmente voy poniendo prints /liga por todos lados para que me vaya mostrando el contenido de las cadenas. No recuerdo muy bien el funcionamiento de input pero puede ser que el string que se esté incorporando lleve un salto de línea final ( \n)? Si es así mira la función strip Un saludo El jue., 2 jul. 2020 22:01, lemarchand8679 escribió: > Hola, había escrito para comentar que había solucionado el inconveniente > de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 > para hacer algunas modificaciones, me tira ese error al introducir una > ciudad, y si hago un copy-paste del código funciona y la verdad no se por > qué, alguna idea? Gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 2 18:29:33 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 2 Jul 2020 19:29:33 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Hola, este es mi código: import requests import json api_key = "API_KEY" url = "http://api.openweathermap.org/data/2.5/weather?q=sp" nombre_ciudad = input("Ingrese nombre de la ciudad: ") complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad response = requests.get(complete_url) x = response.json() if x["cod"] != "404": y = x["main"] temperatura_actual = y["temp"] celsius = temperatura_actual - 273.15 presion_actual = y["pressure"] humedad_actual = y["humidity"] z = x["clima"] descripcion = z[0]["descripcion"] print(f"Temperatura: {celsius}°") print(f"Presión atmosférica: {presion_actual} hPa") print(f"Humedad: {humedad_actual} %") print(f"Descripción: {descripcion}") else: print("Ciudad no encontrada") La salida es la siguiente: /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py Ingrese nombre de la ciudad: Rosario Traceback (most recent call last): File "/home/raiden/Programacion/weather/weather.py", line 18, in y = x["main"] KeyError: 'main' El código original es este: Python-find-current-weather-of-any-city-using-openweathermap-api/ Saludos y gracias El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< gerardo.diez.garcia en gmail.com>) escribió: > > Hola, > > No soy precisamente un experto, pero yo normalmente voy poniendo prints /liga por todos lados para que me vaya mostrando el contenido de las cadenas. > > No recuerdo muy bien el funcionamiento de input pero puede ser que el string que se esté incorporando lleve un salto de línea final ( \n)? > > Si es así mira la función strip > > Un saludo > > El jue., 2 jul. 2020 22:01, lemarchand8679 escribió: >> >> Hola, había escrito para comentar que había solucionado el inconveniente de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 para hacer algunas modificaciones, me tira ese error al introducir una ciudad, y si hago un copy-paste del código funciona y la verdad no se por qué, alguna idea? Gracias >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ciberseba en gmail.com Thu Jul 2 18:55:51 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Thu, 2 Jul 2020 18:55:51 -0400 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Hola, En efecto el error es porque no encuentra la key en el diccionario. De hecho hice un print de la variable que obtienes tras llamar a la API, y al no tener un API KEY válido no viene el elemento "main" dentro del diccionario. Este es el json de respuesta convertido a diccionario: {'cod': 401, 'message': 'Invalid API key. Please see http://openweathermap.org/faq#error401 for more info.'} Fíjate que si viene el cod (y por eso no se cae en esa línea), pero no viene nada mas, lo que haría yo en ese if es validar respuestas distintas a 200. Raro si, que me creé una cuenta para usar la API, y no me funciona la API KEY. Debe estar desactualizado el tutorial. Saludos. On Thu, Jul 2, 2020 at 6:30 PM Lemarchand Barker wrote: > Hola, este es mi código: > > import requests > import json > > api_key = "API_KEY" > > url = "http://api.openweathermap.org/data/2.5/weather?q=sp" > > nombre_ciudad = input("Ingrese nombre de la ciudad: ") > > complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad > > response = requests.get(complete_url) > > x = response.json() > > if x["cod"] != "404": > > y = x["main"] > > temperatura_actual = y["temp"] > > celsius = temperatura_actual - 273.15 > > presion_actual = y["pressure"] > > humedad_actual = y["humidity"] > > z = x["clima"] > > descripcion = z[0]["descripcion"] > > print(f"Temperatura: {celsius}°") > print(f"Presión atmosférica: {presion_actual} hPa") > print(f"Humedad: {humedad_actual} %") > print(f"Descripción: {descripcion}") > > else: > print("Ciudad no encontrada") > > La salida es la siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py > Ingrese nombre de la ciudad: Rosario > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/weather.py", line 18, in > y = x["main"] > KeyError: 'main' > > El código original es este: > Python-find-current-weather-of-any-city-using-openweathermap-api/ > > > Saludos y gracias > > > El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< > gerardo.diez.garcia en gmail.com>) escribió: > > > > Hola, > > > > No soy precisamente un experto, pero yo normalmente voy poniendo prints > /liga por todos lados para que me vaya mostrando el contenido de las > cadenas. > > > > No recuerdo muy bien el funcionamiento de input pero puede ser que el > string que se esté incorporando lleve un salto de línea final ( \n)? > > > > Si es así mira la función strip > > > > Un saludo > > > > El jue., 2 jul. 2020 22:01, lemarchand8679 > escribió: > >> > >> Hola, había escrito para comentar que había solucionado el > inconveniente de KeyError, y es cierto en parte. Digo en parte porque si > escribo desde 0 para hacer algunas modificaciones, me tira ese error al > introducir una ciudad, y si hago un copy-paste del código funciona y la > verdad no se por qué, alguna idea? Gracias > >> > >> > >> > >> Enviado desde mi smartphone Samsung Galaxy. > >> > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From alexis.roda.villalonga en gmail.com Thu Jul 2 18:56:13 2020 From: alexis.roda.villalonga en gmail.com (Alexis Roda) Date: Fri, 3 Jul 2020 00:56:13 +0200 Subject: [Python-es] [Consulta] KeyError: 'main' In-Reply-To: References: Message-ID: Hola, En este caso el valor de x no es exactamente como crees que es: esperas que tenga una clave llamada "main" que aparentemente no tiene (dispara una excepción KeyError cuando intentas acceder a "main"). Lo que puedes hacer es averiguar como es realmente el valor almacenado en x. Lo más sencillo para depurar este tipo de errores es utilizar alguna variación de esto que tenga sentido en cada caso: x = response.json() print(type(x)) # esto te permite confirmar si x es realmente del tipo que esperas print(list(x.keys())) # suponiendo que sea un diccionario, esto te muestra sus claves print(d) # esto imprime el diccionario Imagino que al hacer la petición al servidor remoto se produce algún tipo de error que no tienes en cuenta y el formato de la respuesta es distinto al esperado. Dices que has cambiado "main" por "cod", no acabo de verle la lógica parece bastante arbitrario. Para aprender sería interesante que vieses porque ese cambio produce el segundo error. Saludos Missatge de Lemarchand Barker del dia dj., 2 de jul. 2020 a les 16:44: > Hola, estoy teniendo un inconveniente a la hora de correr un programa. > > El código es este: > > base_url = "http://api.openweathermap.org/data/2.5/weather?q=" > > city_name = input("Ingrese nombre de la ciudad: ") > > complete_url = base_url + "appid=" + api_key + "&q=" + city_name > > response = requests.get(complete_url) > > x = response.json() > > if x["cod"] != "404": > y = x['main'] > # y = x["cod"] > current_temperature = y["temp"] > current_pressure = y["pressure"] > current_humidiy = y["humidity"] > z = x["weather"] > weather_description = z[0]["description"] > > print( > "Temperature (in centigrade unit) = " + > str(current_temperature) + > "\n atmospheric pressure (in hPa unit) = " + > str(current_pressure) + > "\n humidity (in percentage) = " + > str(current_humidiy) + > "\n description = " + > str(weather_description) > ) > else: > print(" Ciudad no encontrada ") > > El problema se da cuando intento ingresar una ciudad. Probé con la mía > Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo > mismo. > La salida es la siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py > Ingrese nombre de la ciudad: London > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/tiempo.py", line 18, in > y = x['main'] > KeyError: 'main' > > Leí que generalmente ese error se debe a que no encuentra el path o no > existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es > otro. Es el siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py > Ingrese nombre de la ciudad: London > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/tiempo.py", line 20, in > current_temperature = y["temp"] > TypeError: 'int' object is not subscriptable > > Asi que por eso comenté la línea como se ve en el código, porque me parece > que mi problema es con main. > > El código original es este: > Python-find-current-weather-of-any-city-using-openweathermap-api/ > > > Saludos > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From david.suarez en yahoo.com Thu Jul 2 18:58:22 2020 From: david.suarez en yahoo.com (=?UTF-8?Q?David_Su=C3=A1rez?=) Date: Thu, 2 Jul 2020 17:58:22 -0500 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Vero, el problema que veo es que tienes la cadena "sp" de sobra tanto en la variable url como cuando generas complete_url y creo que no deberían ir allí, aunque no he podido checarlo por lo de la llave API. El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( lemarchand8679 en gmail.com) escribió: > Hola, este es mi código: > > import requests > import json > > api_key = "API_KEY" > > url = "http://api.openweathermap.org/data/2.5/weather?q=sp" > > nombre_ciudad = input("Ingrese nombre de la ciudad: ") > > complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad > > response = requests.get(complete_url) > > x = response.json() > > if x["cod"] != "404": > > y = x["main"] > > temperatura_actual = y["temp"] > > celsius = temperatura_actual - 273.15 > > presion_actual = y["pressure"] > > humedad_actual = y["humidity"] > > z = x["clima"] > > descripcion = z[0]["descripcion"] > > print(f"Temperatura: {celsius}°") > print(f"Presión atmosférica: {presion_actual} hPa") > print(f"Humedad: {humedad_actual} %") > print(f"Descripción: {descripcion}") > > else: > print("Ciudad no encontrada") > > La salida es la siguiente: > > /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py > Ingrese nombre de la ciudad: Rosario > Traceback (most recent call last): > File "/home/raiden/Programacion/weather/weather.py", line 18, in > y = x["main"] > KeyError: 'main' > > El código original es este: > Python-find-current-weather-of-any-city-using-openweathermap-api/ > > > Saludos y gracias > > > El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< > gerardo.diez.garcia en gmail.com>) escribió: > > > > Hola, > > > > No soy precisamente un experto, pero yo normalmente voy poniendo prints > /liga por todos lados para que me vaya mostrando el contenido de las > cadenas. > > > > No recuerdo muy bien el funcionamiento de input pero puede ser que el > string que se esté incorporando lleve un salto de línea final ( \n)? > > > > Si es así mira la función strip > > > > Un saludo > > > > El jue., 2 jul. 2020 22:01, lemarchand8679 > escribió: > >> > >> Hola, había escrito para comentar que había solucionado el > inconveniente de KeyError, y es cierto en parte. Digo en parte porque si > escribo desde 0 para hacer algunas modificaciones, me tira ese error al > introducir una ciudad, y si hago un copy-paste del código funciona y la > verdad no se por qué, alguna idea? Gracias > >> > >> > >> > >> Enviado desde mi smartphone Samsung Galaxy. > >> > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 2 19:21:42 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 2 Jul 2020 20:21:42 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Hola, el código de api key funciona, porque me registré y lo usé y funcionó. Lo de sp fue más que nada para probar, corresponde al Multilingual support. Incluso cuando hice copy-paste del código sin usar el sp, funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. Lo del multilingual está ya casi al final de la página. La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es la misma que figura en la página. Reitero, el problema me salta cada vez que copio el código de forma manual, con copy-paste ningún problema. Saludos El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< python-es en python.org>) escribió: > Vero, > > el problema que veo es que tienes la cadena "sp" de sobra tanto en la > variable url como cuando generas complete_url y creo que no deberían ir > allí, aunque no he podido checarlo por lo de la llave API. > > El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( > lemarchand8679 en gmail.com) escribió: > >> Hola, este es mi código: >> >> import requests >> import json >> >> api_key = "API_KEY" >> >> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >> >> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >> >> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >> >> response = requests.get(complete_url) >> >> x = response.json() >> >> if x["cod"] != "404": >> >> y = x["main"] >> >> temperatura_actual = y["temp"] >> >> celsius = temperatura_actual - 273.15 >> >> presion_actual = y["pressure"] >> >> humedad_actual = y["humidity"] >> >> z = x["clima"] >> >> descripcion = z[0]["descripcion"] >> >> print(f"Temperatura: {celsius}°") >> print(f"Presión atmosférica: {presion_actual} hPa") >> print(f"Humedad: {humedad_actual} %") >> print(f"Descripción: {descripcion}") >> >> else: >> print("Ciudad no encontrada") >> >> La salida es la siguiente: >> >> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >> Ingrese nombre de la ciudad: Rosario >> Traceback (most recent call last): >> File "/home/raiden/Programacion/weather/weather.py", line 18, in >> >> y = x["main"] >> KeyError: 'main' >> >> El código original es este: >> Python-find-current-weather-of-any-city-using-openweathermap-api/ >> >> >> Saludos y gracias >> >> >> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >> gerardo.diez.garcia en gmail.com>) escribió: >> > >> > Hola, >> > >> > No soy precisamente un experto, pero yo normalmente voy poniendo prints >> /liga por todos lados para que me vaya mostrando el contenido de las >> cadenas. >> > >> > No recuerdo muy bien el funcionamiento de input pero puede ser que el >> string que se esté incorporando lleve un salto de línea final ( \n)? >> > >> > Si es así mira la función strip >> > >> > Un saludo >> > >> > El jue., 2 jul. 2020 22:01, lemarchand8679 >> escribió: >> >> >> >> Hola, había escrito para comentar que había solucionado el >> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >> introducir una ciudad, y si hago un copy-paste del código funciona y la >> verdad no se por qué, alguna idea? Gracias >> >> >> >> >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> >> _______________________________________________ >> >> Python-es mailing list >> >> Python-es en python.org >> >> https://mail.python.org/mailman/listinfo/python-es >> > >> > _______________________________________________ >> > Python-es mailing list >> > Python-es en python.org >> > https://mail.python.org/mailman/listinfo/python-es >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lasizoillo en gmail.com Thu Jul 2 21:29:53 2020 From: lasizoillo en gmail.com (lasizoillo) Date: Fri, 3 Jul 2020 03:29:53 +0200 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Buenas, perdonad el Off Topic, pero creo que es interesante comentar esto. El jue., 2 jul. 2020 a las 23:19, Gerardo Diez (< gerardo.diez.garcia en gmail.com>) escribió: > Hola, > > No soy precisamente un experto, pero yo normalmente voy poniendo prints > /liga por todos lados para que me vaya mostrando el contenido de las > cadenas. > > > No te voy a dármelas de listo y voy a confesar que de vez en cuando también hago "print debugging", pero cuando cuando lo hago es por pura vagancia y cosas muy rapiditas aun sabiendo que no es lo mejor para el día a día o para proyectos que van cogiendo cierto tamaño. Un avance sobre sobre el "print debugging" es usar el módulo logging. Basicamente la idea es que los prints que usas de debug los tienes que quitar para no tener "morralla" en producción. Si los imprimes con nivel de log debug, modificando en un único sitio puedes hacer que aparezcan o desaparezcan con la configuración del logger y no se escapa ninguno a producción ensuciándose los logs. Y puedes incluso configurar para que determinado módulo (o el namespace que utilices) tenga un cierto nivel de log (por ejemplo DEBUG) mientras que otros módulos tengan otro nivel de log (por ejemplo WARNING). Pero lo mejor del mundo mundial es usar un debugger. Pdb viene con python pero es muy espartano, seguramente estés más cómodo con ipdb. Y si usas un IDE seguro que se integra con uno, que es incluso más cómodo. Puedes poner puntos de ruptura (el código se ejecuta hasta llegar a uno de ellos), ejecutar a partir de ahí paso a paso, analizar cualquier variable que tengas en el scope, volver a hacer que el programa se ejecute hasta el final o el siguiente punto de ruptura, usar el repl de python para probar que el código que te va a solucionar el problema realmente funciona,... Al principio puede que cueste un poquito, pero la inversión de tiempo se amortiza rápido. Resumen: a nada que estés haciendo algo que no sea un script de usar y tirar configura el logger y deja de usar print debugging. Aun así no hagas "print debugging" con el logger a no ser que esté justificado, mejor usa un debugger. Un saludo, Javi ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ciberseba en gmail.com Thu Jul 2 22:16:43 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Thu, 2 Jul 2020 22:16:43 -0400 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Aportando a lo que dices, y considerando que Verónica (ese era tu nombre, verdad?) usa PyCharm, el debugger que viene con el IDE es prácticamente lo mejor del IDE. Puedes configurar tu código para que se ejecute desde un main y ahí es simplemente darle "play" a la flecha que aparece al costado de la línea donde declaras el main (justo no estoy en el compu del trabajo donde uso PyCharm para desarrollar, pero mañana podría subir una captura). El debugging te permite, aparte de poner los puntos de quiebre, ver los valores de las variables en todo momento así como usar watchers para ser aún más específico, así que si, muy buen consejo y es recomendable familiarizarse a debuggear así ya que con print logging pierdes mucho tiempo en escribir y luego remover logs que no se usarán en la app. Saludos. On Thu, Jul 2, 2020 at 9:30 PM lasizoillo wrote: > Buenas, perdonad el Off Topic, pero creo que es interesante comentar esto. > > El jue., 2 jul. 2020 a las 23:19, Gerardo Diez (< > gerardo.diez.garcia en gmail.com>) escribió: > >> Hola, >> >> No soy precisamente un experto, pero yo normalmente voy poniendo prints >> /liga por todos lados para que me vaya mostrando el contenido de las >> cadenas. >> >> >> > No te voy a dármelas de listo y voy a confesar que de vez en cuando > también hago "print debugging", pero cuando cuando lo hago es por pura > vagancia y cosas muy rapiditas aun sabiendo que no es lo mejor para el día > a día o para proyectos que van cogiendo cierto tamaño. > > Un avance sobre sobre el "print debugging" es usar el módulo logging. > Basicamente la idea es que los prints que usas de debug los tienes que > quitar para no tener "morralla" en producción. Si los imprimes con nivel de > log debug, modificando en un único sitio puedes hacer que aparezcan o > desaparezcan con la configuración del logger y no se escapa ninguno a > producción ensuciándose los logs. Y puedes incluso configurar para que > determinado módulo (o el namespace que utilices) tenga un cierto nivel de > log (por ejemplo DEBUG) mientras que otros módulos tengan otro nivel de log > (por ejemplo WARNING). > > Pero lo mejor del mundo mundial es usar un debugger. Pdb viene con python > pero es muy espartano, seguramente estés más cómodo con ipdb. Y si usas un > IDE seguro que se integra con uno, que es incluso más cómodo. Puedes poner > puntos de ruptura (el código se ejecuta hasta llegar a uno de ellos), > ejecutar a partir de ahí paso a paso, analizar cualquier variable que > tengas en el scope, volver a hacer que el programa se ejecute hasta el > final o el siguiente punto de ruptura, usar el repl de python para probar > que el código que te va a solucionar el problema realmente funciona,... Al > principio puede que cueste un poquito, pero la inversión de tiempo se > amortiza rápido. > > Resumen: a nada que estés haciendo algo que no sea un script de usar y > tirar configura el logger y deja de usar print debugging. Aun así no hagas > "print debugging" con el logger a no ser que esté justificado, mejor usa un > debugger. > > Un saludo, > > Javi > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From alexis.roda.villalonga en gmail.com Fri Jul 3 03:32:01 2020 From: alexis.roda.villalonga en gmail.com (Alexis Roda) Date: Fri, 3 Jul 2020 09:32:01 +0200 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del problema. En el otro mensaje, al cambiar "main" por "cod" el error era "int value is not subscriptable" (o algo parecido), eso nos dice que el valor asociado a la clave "cod" es un número (habría que confirmarlo con la documentación de la API) pero el programa lo trata como una cadena (en el if x["cod"] != "404"). El número 404 y la cadena "404" comparan como distintos. No sé si tiene que ver con el KeyError main pero es un error que habría que corregir. Relacionado con esto, no parece buena idea asumir que si el código es distinto de 404 la petición ha ido bien. Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino imprime "error desconocido". Me llama la atención que el script utilice el paquete requests para luego acabar construyendo la URL a mano. Por otro lado la URL que construye no parece muy correcta. Suponiendo que nombre_ciudad sea FOO: url = "http://api.openweathermap.org/data/2.5/weather?q=sp" complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad al final complete_url vale http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. Creo que deberia ser algo mas parecido a http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp. Usando requests de forma correcta te quitas problemas: url = "http://api.openweathermap.org/data/2.5/weather " response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", "appid": api_key}) añadirá el ? y los & donde corresponda, codificará correctamente los valores y no quedarán valores "desparejados" ni claves duplicadas. Visto todo esto sigo pensando que el problema es una mala petición a la API que devuelve un código de error que no es gestionado correctamente. Respecto a que el problema se produzca cuando escribes el programa a mano y que funciona si copias/pegas. En caso que no sea un error evidente en la transcripción y que el valor de x no te dé ninguna pista, los IDE suelen incluir alguna herramienta para comparar archivos. Comparalos y encuentra que los hace diferentes y puede causar el problema. https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html Creo que es excesivo para este problema pero es otra herramienta que puede ser útil. Saludos Missatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 1:22: > Hola, el código de api key funciona, porque me registré y lo usé y > funcionó. > Lo de sp fue más que nada para probar, corresponde al Multilingual > support. Incluso cuando hice copy-paste del código sin usar el sp, > funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. > Lo del multilingual está ya casi al final de la página. > La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es > la misma que figura en la página. Reitero, el problema me salta cada vez > que copio el código de forma manual, con copy-paste ningún problema. > Saludos > > El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< > python-es en python.org>) escribió: > >> Vero, >> >> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >> variable url como cuando generas complete_url y creo que no deberían ir >> allí, aunque no he podido checarlo por lo de la llave API. >> >> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >> lemarchand8679 en gmail.com) escribió: >> >>> Hola, este es mi código: >>> >>> import requests >>> import json >>> >>> api_key = "API_KEY" >>> >>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>> >>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>> >>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>> >>> response = requests.get(complete_url) >>> >>> x = response.json() >>> >>> if x["cod"] != "404": >>> >>> y = x["main"] >>> >>> temperatura_actual = y["temp"] >>> >>> celsius = temperatura_actual - 273.15 >>> >>> presion_actual = y["pressure"] >>> >>> humedad_actual = y["humidity"] >>> >>> z = x["clima"] >>> >>> descripcion = z[0]["descripcion"] >>> >>> print(f"Temperatura: {celsius}°") >>> print(f"Presión atmosférica: {presion_actual} hPa") >>> print(f"Humedad: {humedad_actual} %") >>> print(f"Descripción: {descripcion}") >>> >>> else: >>> print("Ciudad no encontrada") >>> >>> La salida es la siguiente: >>> >>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>> Ingrese nombre de la ciudad: Rosario >>> Traceback (most recent call last): >>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>> >>> y = x["main"] >>> KeyError: 'main' >>> >>> El código original es este: >>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>> >>> >>> Saludos y gracias >>> >>> >>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>> gerardo.diez.garcia en gmail.com>) escribió: >>> > >>> > Hola, >>> > >>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>> cadenas. >>> > >>> > No recuerdo muy bien el funcionamiento de input pero puede ser que el >>> string que se esté incorporando lleve un salto de línea final ( \n)? >>> > >>> > Si es así mira la función strip >>> > >>> > Un saludo >>> > >>> > El jue., 2 jul. 2020 22:01, lemarchand8679 >>> escribió: >>> >> >>> >> Hola, había escrito para comentar que había solucionado el >>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>> verdad no se por qué, alguna idea? Gracias >>> >> >>> >> >>> >> >>> >> Enviado desde mi smartphone Samsung Galaxy. >>> >> >>> >> _______________________________________________ >>> >> Python-es mailing list >>> >> Python-es en python.org >>> >> https://mail.python.org/mailman/listinfo/python-es >>> > >>> > _______________________________________________ >>> > Python-es mailing list >>> > Python-es en python.org >>> > https://mail.python.org/mailman/listinfo/python-es >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 3 07:36:12 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Fri, 3 Jul 2020 08:36:12 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Buenas gracias a todos por sus aportes. Si, me llamo Verónica. En respuesta a Alexis, puede ser una forma incorrecta de realizar la consulta pero cuando hice copy-paste, al probar con distintas localidades funcionó. Tengo que mirar la info para desarrolladores que tiene más detenidamente, no es larga. Yo al 404 lo entiendo como el de page not found, de ahí que el else te diga que no encontró la ciudad. No encuentra la página con la información de esa localidad. El vie., 3 de jul. de 2020 04:33, Alexis Roda < alexis.roda.villalonga en gmail.com> escribió: > Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no > tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del > problema. > > En el otro mensaje, al cambiar "main" por "cod" el error era "int value is > not subscriptable" (o algo parecido), eso nos dice que el valor asociado a > la clave "cod" es un número (habría que confirmarlo con la documentación de > la API) pero el programa lo trata como una cadena (en el if x["cod"] != > "404"). El número 404 y la cadena "404" comparan como distintos. No sé si > tiene que ver con el KeyError main pero es un error que habría que > corregir. Relacionado con esto, no parece buena idea asumir que si el > código es distinto de 404 la petición ha ido bien. Asumiendo que sean > códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si > cod == 404 imprime "no encontrado" ... sino imprime "error desconocido". > > Me llama la atención que el script utilice el paquete requests para luego > acabar construyendo la URL a mano. Por otro lado la URL que construye no > parece muy correcta. Suponiendo que nombre_ciudad sea FOO: > > url = "http://api.openweathermap.org/data/2.5/weather?q=sp" > complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad > > > al final complete_url vale > http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. > Creo que deberia ser algo mas parecido a > http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp > . > > Usando requests de forma correcta te quitas problemas: > > url = "http://api.openweathermap.org/data/2.5/weather > " > response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", > "appid": api_key}) > > > añadirá el ? y los & donde corresponda, codificará correctamente los > valores y no quedarán valores "desparejados" ni claves duplicadas. > > Visto todo esto sigo pensando que el problema es una mala petición a la > API que devuelve un código de error que no es gestionado correctamente. > > Respecto a que el problema se produzca cuando escribes el programa a mano > y que funciona si copias/pegas. En caso que no sea un error evidente en la > transcripción y que el valor de x no te dé ninguna pista, los IDE suelen > incluir alguna herramienta para comparar archivos. Comparalos y encuentra > que los hace diferentes y puede causar el problema. > > https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html > > Creo que es excesivo para este problema pero es otra herramienta que puede > ser útil. > > > Saludos > > Missatge de Lemarchand Barker del dia dv., 3 > de jul. 2020 a les 1:22: > >> Hola, el código de api key funciona, porque me registré y lo usé y >> funcionó. >> Lo de sp fue más que nada para probar, corresponde al Multilingual >> support. Incluso cuando hice copy-paste del código sin usar el sp, >> funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. >> Lo del multilingual está ya casi al final de la página. >> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es >> la misma que figura en la página. Reitero, el problema me salta cada vez >> que copio el código de forma manual, con copy-paste ningún problema. >> Saludos >> >> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >> python-es en python.org>) escribió: >> >>> Vero, >>> >>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >>> variable url como cuando generas complete_url y creo que no deberían ir >>> allí, aunque no he podido checarlo por lo de la llave API. >>> >>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>> lemarchand8679 en gmail.com) escribió: >>> >>>> Hola, este es mi código: >>>> >>>> import requests >>>> import json >>>> >>>> api_key = "API_KEY" >>>> >>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>> >>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>> >>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>> >>>> response = requests.get(complete_url) >>>> >>>> x = response.json() >>>> >>>> if x["cod"] != "404": >>>> >>>> y = x["main"] >>>> >>>> temperatura_actual = y["temp"] >>>> >>>> celsius = temperatura_actual - 273.15 >>>> >>>> presion_actual = y["pressure"] >>>> >>>> humedad_actual = y["humidity"] >>>> >>>> z = x["clima"] >>>> >>>> descripcion = z[0]["descripcion"] >>>> >>>> print(f"Temperatura: {celsius}°") >>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>> print(f"Humedad: {humedad_actual} %") >>>> print(f"Descripción: {descripcion}") >>>> >>>> else: >>>> print("Ciudad no encontrada") >>>> >>>> La salida es la siguiente: >>>> >>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>> Ingrese nombre de la ciudad: Rosario >>>> Traceback (most recent call last): >>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>> >>>> y = x["main"] >>>> KeyError: 'main' >>>> >>>> El código original es este: >>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>> >>>> >>>> Saludos y gracias >>>> >>>> >>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>> gerardo.diez.garcia en gmail.com>) escribió: >>>> > >>>> > Hola, >>>> > >>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>> cadenas. >>>> > >>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que el >>>> string que se esté incorporando lleve un salto de línea final ( \n)? >>>> > >>>> > Si es así mira la función strip >>>> > >>>> > Un saludo >>>> > >>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 >>>> escribió: >>>> >> >>>> >> Hola, había escrito para comentar que había solucionado el >>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>> verdad no se por qué, alguna idea? Gracias >>>> >> >>>> >> >>>> >> >>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>> >> >>>> >> _______________________________________________ >>>> >> Python-es mailing list >>>> >> Python-es en python.org >>>> >> https://mail.python.org/mailman/listinfo/python-es >>>> > >>>> > _______________________________________________ >>>> > Python-es mailing list >>>> > Python-es en python.org >>>> > https://mail.python.org/mailman/listinfo/python-es >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 3 08:04:31 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Fri, 3 Jul 2020 09:04:31 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Por o visto no fuí la única con el problema de main El vie., 3 jul. 2020 a las 8:36, Lemarchand Barker (< lemarchand8679 en gmail.com>) escribió: > Buenas gracias a todos por sus aportes. Si, me llamo Verónica. > En respuesta a Alexis, puede ser una forma incorrecta de realizar la > consulta pero cuando hice copy-paste, al probar con distintas localidades > funcionó. Tengo que mirar la info para desarrolladores que tiene más > detenidamente, no es larga. > Yo al 404 lo entiendo como el de page not found, de ahí que el else te > diga que no encontró la ciudad. No encuentra la página con la información > de esa localidad. > > > > El vie., 3 de jul. de 2020 04:33, Alexis Roda < > alexis.roda.villalonga en gmail.com> escribió: > >> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >> problema. >> >> En el otro mensaje, al cambiar "main" por "cod" el error era "int value >> is not subscriptable" (o algo parecido), eso nos dice que el valor asociado >> a la clave "cod" es un número (habría que confirmarlo con la documentación >> de la API) pero el programa lo trata como una cadena (en el if x["cod"] >> != "404"). El número 404 y la cadena "404" comparan como distintos. No >> sé si tiene que ver con el KeyError main pero es un error que habría que >> corregir. Relacionado con esto, no parece buena idea asumir que si el >> código es distinto de 404 la petición ha ido bien. Asumiendo que sean >> códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si >> cod == 404 imprime "no encontrado" ... sino imprime "error desconocido". >> >> Me llama la atención que el script utilice el paquete requests para luego >> acabar construyendo la URL a mano. Por otro lado la URL que construye no >> parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >> >> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >> >> >> al final complete_url vale >> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >> Creo que deberia ser algo mas parecido a >> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >> . >> >> Usando requests de forma correcta te quitas problemas: >> >> url = "http://api.openweathermap.org/data/2.5/weather >> " >> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >> "appid": api_key}) >> >> >> añadirá el ? y los & donde corresponda, codificará correctamente los >> valores y no quedarán valores "desparejados" ni claves duplicadas. >> >> Visto todo esto sigo pensando que el problema es una mala petición a la >> API que devuelve un código de error que no es gestionado correctamente. >> >> Respecto a que el problema se produzca cuando escribes el programa a mano >> y que funciona si copias/pegas. En caso que no sea un error evidente en la >> transcripción y que el valor de x no te dé ninguna pista, los IDE suelen >> incluir alguna herramienta para comparar archivos. Comparalos y encuentra >> que los hace diferentes y puede causar el problema. >> >> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >> >> Creo que es excesivo para este problema pero es otra herramienta que >> puede ser útil. >> >> >> Saludos >> >> Missatge de Lemarchand Barker del dia dv., 3 >> de jul. 2020 a les 1:22: >> >>> Hola, el código de api key funciona, porque me registré y lo usé y >>> funcionó. >>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>> funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. >>> Lo del multilingual está ya casi al final de la página. >>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es >>> la misma que figura en la página. Reitero, el problema me salta cada vez >>> que copio el código de forma manual, con copy-paste ningún problema. >>> Saludos >>> >>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>> python-es en python.org>) escribió: >>> >>>> Vero, >>>> >>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >>>> variable url como cuando generas complete_url y creo que no deberían ir >>>> allí, aunque no he podido checarlo por lo de la llave API. >>>> >>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>> lemarchand8679 en gmail.com) escribió: >>>> >>>>> Hola, este es mi código: >>>>> >>>>> import requests >>>>> import json >>>>> >>>>> api_key = "API_KEY" >>>>> >>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>> >>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>> >>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>> >>>>> response = requests.get(complete_url) >>>>> >>>>> x = response.json() >>>>> >>>>> if x["cod"] != "404": >>>>> >>>>> y = x["main"] >>>>> >>>>> temperatura_actual = y["temp"] >>>>> >>>>> celsius = temperatura_actual - 273.15 >>>>> >>>>> presion_actual = y["pressure"] >>>>> >>>>> humedad_actual = y["humidity"] >>>>> >>>>> z = x["clima"] >>>>> >>>>> descripcion = z[0]["descripcion"] >>>>> >>>>> print(f"Temperatura: {celsius}°") >>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>> print(f"Humedad: {humedad_actual} %") >>>>> print(f"Descripción: {descripcion}") >>>>> >>>>> else: >>>>> print("Ciudad no encontrada") >>>>> >>>>> La salida es la siguiente: >>>>> >>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>> Ingrese nombre de la ciudad: Rosario >>>>> Traceback (most recent call last): >>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>> >>>>> y = x["main"] >>>>> KeyError: 'main' >>>>> >>>>> El código original es este: >>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>> >>>>> >>>>> Saludos y gracias >>>>> >>>>> >>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>> > >>>>> > Hola, >>>>> > >>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>> cadenas. >>>>> > >>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que >>>>> el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>> > >>>>> > Si es así mira la función strip >>>>> > >>>>> > Un saludo >>>>> > >>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 >>>>> escribió: >>>>> >> >>>>> >> Hola, había escrito para comentar que había solucionado el >>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>> verdad no se por qué, alguna idea? Gracias >>>>> >> >>>>> >> >>>>> >> >>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>> >> >>>>> >> _______________________________________________ >>>>> >> Python-es mailing list >>>>> >> Python-es en python.org >>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>> > >>>>> > _______________________________________________ >>>>> > Python-es mailing list >>>>> > Python-es en python.org >>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : error.png Tipo : image/png Tamaño : 75710 bytes Descripción: no disponible Url : From alexis.roda.villalonga en gmail.com Fri Jul 3 10:18:02 2020 From: alexis.roda.villalonga en gmail.com (Alexis Roda) Date: Fri, 3 Jul 2020 16:18:02 +0200 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5efe3cd7.1c69fb81.a1be5.e28d@mx.google.com> Message-ID: Tiendo a dar demasiada información y perderme en detalles. La parte relevante de mi respuesta es cuando digo que el número 404 y la cadena "404" comparan como distintos. En Python, si comparas un número (un int) y una cadena (un str) el resultado es que siempre son distintos, independientemente de su valor. Esto implica que *la rama del else jamás se ejecuta*, no importa qué código de respuesta devuelve la API, siempre se ejecuta la rama del then. Esto es un problema cuando la respuesta es no-OK y no contiene la clave "main". Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", ...}. La confirmación definitiva sería la documentación de la API, la especificación del formato de la respuesta. Con "la forma correcta" quería decir "la forma recomendada". requests ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya que se importa se me hace extraño no aprovecharlos. También te recomiendo que revises la gestión de errores, parece frágil. Imagino que si el código de respuesta es distingo de 404 no significa necesariamente que la petición ha ido bien. Confirmalo con la documentación de la API. Saludos Missatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 13:36: > Buenas gracias a todos por sus aportes. Si, me llamo Verónica. > En respuesta a Alexis, puede ser una forma incorrecta de realizar la > consulta pero cuando hice copy-paste, al probar con distintas localidades > funcionó. Tengo que mirar la info para desarrolladores que tiene más > detenidamente, no es larga. > Yo al 404 lo entiendo como el de page not found, de ahí que el else te > diga que no encontró la ciudad. No encuentra la página con la información > de esa localidad. > > > > El vie., 3 de jul. de 2020 04:33, Alexis Roda < > alexis.roda.villalonga en gmail.com> escribió: > >> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >> problema. >> >> En el otro mensaje, al cambiar "main" por "cod" el error era "int value >> is not subscriptable" (o algo parecido), eso nos dice que el valor asociado >> a la clave "cod" es un número (habría que confirmarlo con la documentación >> de la API) pero el programa lo trata como una cadena (en el if x["cod"] >> != "404"). El número 404 y la cadena "404" comparan como distintos. No >> sé si tiene que ver con el KeyError main pero es un error que habría que >> corregir. Relacionado con esto, no parece buena idea asumir que si el >> código es distinto de 404 la petición ha ido bien. Asumiendo que sean >> códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si >> cod == 404 imprime "no encontrado" ... sino imprime "error desconocido". >> >> Me llama la atención que el script utilice el paquete requests para luego >> acabar construyendo la URL a mano. Por otro lado la URL que construye no >> parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >> >> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >> >> >> al final complete_url vale >> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >> Creo que deberia ser algo mas parecido a >> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >> . >> >> Usando requests de forma correcta te quitas problemas: >> >> url = "http://api.openweathermap.org/data/2.5/weather >> " >> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >> "appid": api_key}) >> >> >> añadirá el ? y los & donde corresponda, codificará correctamente los >> valores y no quedarán valores "desparejados" ni claves duplicadas. >> >> Visto todo esto sigo pensando que el problema es una mala petición a la >> API que devuelve un código de error que no es gestionado correctamente. >> >> Respecto a que el problema se produzca cuando escribes el programa a mano >> y que funciona si copias/pegas. En caso que no sea un error evidente en la >> transcripción y que el valor de x no te dé ninguna pista, los IDE suelen >> incluir alguna herramienta para comparar archivos. Comparalos y encuentra >> que los hace diferentes y puede causar el problema. >> >> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >> >> Creo que es excesivo para este problema pero es otra herramienta que >> puede ser útil. >> >> >> Saludos >> >> Missatge de Lemarchand Barker del dia dv., 3 >> de jul. 2020 a les 1:22: >> >>> Hola, el código de api key funciona, porque me registré y lo usé y >>> funcionó. >>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>> funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. >>> Lo del multilingual está ya casi al final de la página. >>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es >>> la misma que figura en la página. Reitero, el problema me salta cada vez >>> que copio el código de forma manual, con copy-paste ningún problema. >>> Saludos >>> >>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>> python-es en python.org>) escribió: >>> >>>> Vero, >>>> >>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >>>> variable url como cuando generas complete_url y creo que no deberían ir >>>> allí, aunque no he podido checarlo por lo de la llave API. >>>> >>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>> lemarchand8679 en gmail.com) escribió: >>>> >>>>> Hola, este es mi código: >>>>> >>>>> import requests >>>>> import json >>>>> >>>>> api_key = "API_KEY" >>>>> >>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>> >>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>> >>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>> >>>>> response = requests.get(complete_url) >>>>> >>>>> x = response.json() >>>>> >>>>> if x["cod"] != "404": >>>>> >>>>> y = x["main"] >>>>> >>>>> temperatura_actual = y["temp"] >>>>> >>>>> celsius = temperatura_actual - 273.15 >>>>> >>>>> presion_actual = y["pressure"] >>>>> >>>>> humedad_actual = y["humidity"] >>>>> >>>>> z = x["clima"] >>>>> >>>>> descripcion = z[0]["descripcion"] >>>>> >>>>> print(f"Temperatura: {celsius}°") >>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>> print(f"Humedad: {humedad_actual} %") >>>>> print(f"Descripción: {descripcion}") >>>>> >>>>> else: >>>>> print("Ciudad no encontrada") >>>>> >>>>> La salida es la siguiente: >>>>> >>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>> Ingrese nombre de la ciudad: Rosario >>>>> Traceback (most recent call last): >>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>> >>>>> y = x["main"] >>>>> KeyError: 'main' >>>>> >>>>> El código original es este: >>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>> >>>>> >>>>> Saludos y gracias >>>>> >>>>> >>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>> > >>>>> > Hola, >>>>> > >>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>> cadenas. >>>>> > >>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que >>>>> el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>> > >>>>> > Si es así mira la función strip >>>>> > >>>>> > Un saludo >>>>> > >>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 >>>>> escribió: >>>>> >> >>>>> >> Hola, había escrito para comentar que había solucionado el >>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>> verdad no se por qué, alguna idea? Gracias >>>>> >> >>>>> >> >>>>> >> >>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>> >> >>>>> >> _______________________________________________ >>>>> >> Python-es mailing list >>>>> >> Python-es en python.org >>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>> > >>>>> > _______________________________________________ >>>>> > Python-es mailing list >>>>> > Python-es en python.org >>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 3 13:40:27 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Fri, 03 Jul 2020 14:40:27 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: Message-ID: <5eff6d8e.1c69fb81.8ef72.7d0e@mx.google.com> Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece estar correcta, está validada y todo. Probé generando otra y lo mismo; keyerror.Enviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Alexis Roda Fecha: 3/7/20 11:19 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Sobre keyerror Tiendo a dar demasiada información y perderme en detalles. La parte relevante de mi respuesta es cuando digo que el número 404 y la cadena "404" comparan como distintos. En Python, si comparas un número (un int) y una cadena (un str) el resultado es que siempre son distintos, independientemente de su valor. Esto implica que la rama del else jamás se ejecuta, no importa qué código de respuesta devuelve la API, siempre se ejecuta la rama del then. Esto es un problema cuando la respuesta es no-OK y no contiene la clave "main".Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123",  ...}. La confirmación definitiva sería la documentación de la API, la especificación del formato de la respuesta.Con "la forma correcta" quería decir "la forma recomendada". requests ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya que se importa se me hace extraño no aprovecharlos.También te recomiendo que revises la gestión de errores, parece frágil. Imagino que si el código de respuesta es distingo de 404 no significa necesariamente que la petición ha ido bien. Confirmalo con la documentación de la API.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 13:36:Buenas gracias a todos por sus aportes. Si, me llamo Verónica.En respuesta a Alexis, puede ser una forma incorrecta de realizar la consulta pero cuando hice copy-paste, al probar con distintas localidades funcionó. Tengo que mirar la info para desarrolladores que tiene más detenidamente, no es larga.Yo al 404 lo entiendo como el de page not found, de ahí que el else te diga que no encontró la ciudad. No encuentra la página con la información de esa localidad.El vie., 3 de jul. de 2020 04:33, Alexis Roda escribió:Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del problema.En el otro mensaje, al cambiar "main" por "cod" el error era "int value is not subscriptable" (o algo parecido), eso nos dice que el valor asociado a la clave "cod" es un número (habría que confirmarlo con la documentación de la API) pero el programa lo trata como una cadena (en el if x["cod"] != "404"). El número 404 y la cadena "404" comparan como distintos. No sé si tiene que ver con el KeyError main pero es un error que habría que corregir. Relacionado con esto, no parece buena idea asumir que si el código es distinto de 404 la petición ha ido bien. Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino imprime "error desconocido".Me llama la atención que el script utilice el paquete requests para luego acabar construyendo la URL a mano. Por otro lado la URL que construye no parece muy correcta. Suponiendo que nombre_ciudad sea FOO:url = "http://api.openweathermap.org/data/2.5/weather?q=sp"complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadal final complete_url vale http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. Creo que deberia ser algo mas parecido a http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp.Usando requests de forma correcta te quitas problemas:url = "http://api.openweathermap.org/data/2.5/weather"response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", "appid": api_key})añadirá el ? y los & donde corresponda, codificará correctamente los valores y no quedarán valores "desparejados" ni claves duplicadas.Visto todo esto sigo pensando que el problema es una mala petición a la API que devuelve un código de error que no es gestionado correctamente.Respecto a que el problema se produzca cuando escribes el programa a mano y que funciona si copias/pegas. En caso que no sea un error evidente en la transcripción y que el valor de x no te dé ninguna pista, los IDE suelen incluir alguna herramienta para comparar archivos. Comparalos y encuentra que los hace diferentes y puede causar el problema.https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.htmlCreo que es excesivo para este problema pero es otra herramienta que puede ser útil.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 1:22:Hola, el código de api key funciona, porque me registré y lo usé y funcionó.Lo de sp fue más que nada para probar, corresponde al Multilingual support. Incluso cuando hice copy-paste del código sin usar el sp, funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. Lo del multilingual está ya casi al final de la página.La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es la misma que figura en la página. Reitero, el problema me salta cada vez que copio el código de forma manual, con copy-paste ningún problema.SaludosEl jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es () escribió:Vero,el problema que veo es que tienes la cadena "sp" de sobra tanto en la variable url como cuando generas complete_url y creo que no deberían ir allí, aunque no he podido checarlo por lo de la llave API.El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker (lemarchand8679 en gmail.com) escribió:Hola, este es mi código:import requestsimport jsonapi_key = "API_KEY"url = "http://api.openweathermap.org/data/2.5/weather?q=sp"nombre_ciudad = input("Ingrese nombre de la ciudad: ")complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadresponse = requests.get(complete_url)x = response.json()if x["cod"] != "404":    y = x["main"]    temperatura_actual = y["temp"]    celsius = temperatura_actual - 273.15    presion_actual = y["pressure"]    humedad_actual = y["humidity"]    z = x["clima"]    descripcion = z[0]["descripcion"]    print(f"Temperatura: {celsius}°")    print(f"Presión atmosférica: {presion_actual} hPa")    print(f"Humedad: {humedad_actual} %")    print(f"Descripción: {descripcion}")else:    print("Ciudad no encontrada")La salida es la siguiente:/usr/bin/python3.8 /home/raiden/Programacion/weather/weather.pyIngrese nombre de la ciudad: RosarioTraceback (most recent call last):  File "/home/raiden/Programacion/weather/weather.py", line 18, in     y = x["main"]KeyError: 'main'El código original es este: Python-find-current-weather-of-any-city-using-openweathermap-api/Saludos y graciasEl jue., 2 jul. 2020 a las 18:20, Gerardo Diez () escribió:>> Hola,>> No soy precisamente un experto, pero yo normalmente voy poniendo prints /liga por todos lados para que me vaya mostrando el contenido de las cadenas.>> No recuerdo muy bien el funcionamiento de input pero puede ser que el string que se esté incorporando lleve un salto de línea final ( \n)?>> Si es así mira la función strip>> Un saludo>> El jue., 2 jul. 2020 22:01, lemarchand8679 escribió:>>>> Hola, había escrito para comentar que había solucionado el inconveniente de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 para hacer algunas modificaciones, me tira ese error al introducir una ciudad, y si hago un copy-paste del código funciona y la verdad no se por qué, alguna idea? Gracias>>>>>>>> Enviado desde mi smartphone Samsung Galaxy.>>>> _______________________________________________>> Python-es mailing list>> Python-es en python.org>> https://mail.python.org/mailman/listinfo/python-es>> _______________________________________________> Python-es mailing list> Python-es en python.org> https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From alexis.roda.villalonga en gmail.com Fri Jul 3 14:00:27 2020 From: alexis.roda.villalonga en gmail.com (Alexis Roda) Date: Fri, 3 Jul 2020 20:00:27 +0200 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: <5eff6d8e.1c69fb81.8ef72.7d0e@mx.google.com> References: <5eff6d8e.1c69fb81.8ef72.7d0e@mx.google.com> Message-ID: Haz este cambio: print(complete_url) # <<< añade esta línea response = requests.get(complete_url) Copia/pega lo que sale por pantalla. Missatge de lemarchand8679 del dia dv., 3 de jul. 2020 a les 19:40: > Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da > el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece > estar correcta, está validada y todo. Probé generando otra y lo mismo; > keyerror. > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Alexis Roda > Fecha: 3/7/20 11:19 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Sobre keyerror > > Tiendo a dar demasiada información y perderme en detalles. La parte > relevante de mi respuesta es cuando digo que el número 404 y la cadena > "404" comparan como distintos. En Python, si comparas un número (un int) y > una cadena (un str) el resultado es que siempre son distintos, > independientemente de su valor. Esto implica que *la rama del else jamás > se ejecuta*, no importa qué código de respuesta devuelve la API, siempre > se ejecuta la rama del then. Esto es un problema cuando la respuesta es > no-OK y no contiene la clave "main". > > Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en > lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", ...}. La > confirmación definitiva sería la documentación de la API, la especificación > del formato de la respuesta. > > Con "la forma correcta" quería decir "la forma recomendada". requests > ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya > que se importa se me hace extraño no aprovecharlos. > > También te recomiendo que revises la gestión de errores, parece frágil. > Imagino que si el código de respuesta es distingo de 404 no significa > necesariamente que la petición ha ido bien. Confirmalo con la documentación > de la API. > > > Saludos > > Missatge de Lemarchand Barker del dia dv., 3 > de jul. 2020 a les 13:36: > >> Buenas gracias a todos por sus aportes. Si, me llamo Verónica. >> En respuesta a Alexis, puede ser una forma incorrecta de realizar la >> consulta pero cuando hice copy-paste, al probar con distintas localidades >> funcionó. Tengo que mirar la info para desarrolladores que tiene más >> detenidamente, no es larga. >> Yo al 404 lo entiendo como el de page not found, de ahí que el else te >> diga que no encontró la ciudad. No encuentra la página con la información >> de esa localidad. >> >> >> >> El vie., 3 de jul. de 2020 04:33, Alexis Roda < >> alexis.roda.villalonga en gmail.com> escribió: >> >>> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >>> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >>> problema. >>> >>> En el otro mensaje, al cambiar "main" por "cod" el error era "int value >>> is not subscriptable" (o algo parecido), eso nos dice que el valor asociado >>> a la clave "cod" es un número (habría que confirmarlo con la documentación >>> de la API) pero el programa lo trata como una cadena (en el if x["cod"] >>> != "404"). El número 404 y la cadena "404" comparan como distintos. No >>> sé si tiene que ver con el KeyError main pero es un error que habría que >>> corregir. Relacionado con esto, no parece buena idea asumir que si el >>> código es distinto de 404 la petición ha ido bien. Asumiendo que sean >>> códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si >>> cod == 404 imprime "no encontrado" ... sino imprime "error desconocido". >>> >>> Me llama la atención que el script utilice el paquete requests para >>> luego acabar construyendo la URL a mano. Por otro lado la URL que construye >>> no parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >>> >>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>> >>> >>> al final complete_url vale >>> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >>> Creo que deberia ser algo mas parecido a >>> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >>> . >>> >>> Usando requests de forma correcta te quitas problemas: >>> >>> url = "http://api.openweathermap.org/data/2.5/weather >>> " >>> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >>> "appid": api_key}) >>> >>> >>> añadirá el ? y los & donde corresponda, codificará correctamente los >>> valores y no quedarán valores "desparejados" ni claves duplicadas. >>> >>> Visto todo esto sigo pensando que el problema es una mala petición a la >>> API que devuelve un código de error que no es gestionado correctamente. >>> >>> Respecto a que el problema se produzca cuando escribes el programa a >>> mano y que funciona si copias/pegas. En caso que no sea un error evidente >>> en la transcripción y que el valor de x no te dé ninguna pista, los IDE >>> suelen incluir alguna herramienta para comparar archivos. Comparalos y >>> encuentra que los hace diferentes y puede causar el problema. >>> >>> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >>> >>> Creo que es excesivo para este problema pero es otra herramienta que >>> puede ser útil. >>> >>> >>> Saludos >>> >>> Missatge de Lemarchand Barker del dia dv., 3 >>> de jul. 2020 a les 1:22: >>> >>>> Hola, el código de api key funciona, porque me registré y lo usé y >>>> funcionó. >>>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>>> funcionaba perfecto. Lo saqué de acá: >>>> https://openweathermap.org/current. Lo del multilingual está ya casi >>>> al final de la página. >>>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que >>>> es la misma que figura en la página. Reitero, el problema me salta cada vez >>>> que copio el código de forma manual, con copy-paste ningún problema. >>>> Saludos >>>> >>>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>>> python-es en python.org>) escribió: >>>> >>>>> Vero, >>>>> >>>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >>>>> variable url como cuando generas complete_url y creo que no deberían ir >>>>> allí, aunque no he podido checarlo por lo de la llave API. >>>>> >>>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>>> lemarchand8679 en gmail.com) escribió: >>>>> >>>>>> Hola, este es mi código: >>>>>> >>>>>> import requests >>>>>> import json >>>>>> >>>>>> api_key = "API_KEY" >>>>>> >>>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>>> >>>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>>> >>>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>>> >>>>>> response = requests.get(complete_url) >>>>>> >>>>>> x = response.json() >>>>>> >>>>>> if x["cod"] != "404": >>>>>> >>>>>> y = x["main"] >>>>>> >>>>>> temperatura_actual = y["temp"] >>>>>> >>>>>> celsius = temperatura_actual - 273.15 >>>>>> >>>>>> presion_actual = y["pressure"] >>>>>> >>>>>> humedad_actual = y["humidity"] >>>>>> >>>>>> z = x["clima"] >>>>>> >>>>>> descripcion = z[0]["descripcion"] >>>>>> >>>>>> print(f"Temperatura: {celsius}°") >>>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>>> print(f"Humedad: {humedad_actual} %") >>>>>> print(f"Descripción: {descripcion}") >>>>>> >>>>>> else: >>>>>> print("Ciudad no encontrada") >>>>>> >>>>>> La salida es la siguiente: >>>>>> >>>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>>> Ingrese nombre de la ciudad: Rosario >>>>>> Traceback (most recent call last): >>>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>>> >>>>>> y = x["main"] >>>>>> KeyError: 'main' >>>>>> >>>>>> El código original es este: >>>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>>> >>>>>> >>>>>> Saludos y gracias >>>>>> >>>>>> >>>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>>> > >>>>>> > Hola, >>>>>> > >>>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>>> cadenas. >>>>>> > >>>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que >>>>>> el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>>> > >>>>>> > Si es así mira la función strip >>>>>> > >>>>>> > Un saludo >>>>>> > >>>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 < >>>>>> lemarchand8679 en gmail.com> escribió: >>>>>> >> >>>>>> >> Hola, había escrito para comentar que había solucionado el >>>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>>> verdad no se por qué, alguna idea? Gracias >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>>> >> >>>>>> >> _______________________________________________ >>>>>> >> Python-es mailing list >>>>>> >> Python-es en python.org >>>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>>> > >>>>>> > _______________________________________________ >>>>>> > Python-es mailing list >>>>>> > Python-es en python.org >>>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es en python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Sat Jul 4 19:44:47 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Sat, 4 Jul 2020 20:44:47 -0300 Subject: [Python-es] [Consulta] Ejemplo con kivy Message-ID: Hola, sigo con kivy y en este caso estoy con un inconveniente que no me tira un error. Hice un ejemplo, ejecuta y todo pero no funciona. El código es el siguiente: archivo.py: layouts.py archivo.kv: layouts.kv Imagen de lo que se tendría que ver: output.png Como comenté, no me tira ningún mensaje de error. Probé copiar y pegar el código y nada. Esta es mi salida: > /usr/bin/python3.8 > /home/raiden/Programacion/kivy/robertour/cap1/emb_layout/layouts.py > [INFO ] [Logger ] Record log in > /home/raiden/.kivy/logs/kivy_20-07-04_10.txt > [INFO ] [Kivy ] v1.10.1 > [INFO ] [Python ] v3.8.2 (default, Apr 27 2020, 15:53:34) > [GCC 9.3.0] > [INFO ] [Factory ] 194 symbols loaded > [INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.3.1 > [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, > img_ffpyplayer, img_gif Voy a seguir con los ejemplos y después vuelvo a ese para ver que puede ser. Saludos ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ciberseba en gmail.com Fri Jul 3 14:11:42 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Fri, 3 Jul 2020 14:11:42 -0400 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5eff6d8e.1c69fb81.8ef72.7d0e@mx.google.com> Message-ID: Hola Verónica (y a todos), Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, te recomiendo que incluyas tu desarrollo dentro de un main. Así podrás ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main puedes ejecutarlo con el botón "play", y arriba te sale el nombre del script y varios botones: play, debug, correr tests y uno de stop. El segundo te permite debuggear y puedes marcar puntos de quiebre al costado de cada linea. Abajo te salen los valores de las variables, es mucho más fácil a la hora de diagnosticar errores, ver los valores de las variables en todo momento y cosas así. [image: image.png] Como aún no logro que me funcione la api key me sigue saliendo el mismo error de ayer, y se cae por eso. Después investigaré más y generaré otra api key para ver otros errores que aparezcan. Saludos. On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda wrote: > Haz este cambio: > > print(complete_url) # <<< añade esta línea > response = requests.get(complete_url) > > > Copia/pega lo que sale por pantalla. > > > Missatge de lemarchand8679 del dia dv., 3 de > jul. 2020 a les 19:40: > >> Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da >> el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece >> estar correcta, está validada y todo. Probé generando otra y lo mismo; >> keyerror. >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> -------- Mensaje original -------- >> De: Alexis Roda >> Fecha: 3/7/20 11:19 (GMT-03:00) >> A: La lista de python en castellano >> Asunto: Re: [Python-es] [Consulta] Sobre keyerror >> >> Tiendo a dar demasiada información y perderme en detalles. La parte >> relevante de mi respuesta es cuando digo que el número 404 y la cadena >> "404" comparan como distintos. En Python, si comparas un número (un int) y >> una cadena (un str) el resultado es que siempre son distintos, >> independientemente de su valor. Esto implica que *la rama del else jamás >> se ejecuta*, no importa qué código de respuesta devuelve la API, siempre >> se ejecuta la rama del then. Esto es un problema cuando la respuesta es >> no-OK y no contiene la clave "main". >> >> Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en >> lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", ...}. La >> confirmación definitiva sería la documentación de la API, la especificación >> del formato de la respuesta. >> >> Con "la forma correcta" quería decir "la forma recomendada". requests >> ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya >> que se importa se me hace extraño no aprovecharlos. >> >> También te recomiendo que revises la gestión de errores, parece frágil. >> Imagino que si el código de respuesta es distingo de 404 no significa >> necesariamente que la petición ha ido bien. Confirmalo con la documentación >> de la API. >> >> >> Saludos >> >> Missatge de Lemarchand Barker del dia dv., 3 >> de jul. 2020 a les 13:36: >> >>> Buenas gracias a todos por sus aportes. Si, me llamo Verónica. >>> En respuesta a Alexis, puede ser una forma incorrecta de realizar la >>> consulta pero cuando hice copy-paste, al probar con distintas localidades >>> funcionó. Tengo que mirar la info para desarrolladores que tiene más >>> detenidamente, no es larga. >>> Yo al 404 lo entiendo como el de page not found, de ahí que el else te >>> diga que no encontró la ciudad. No encuentra la página con la información >>> de esa localidad. >>> >>> >>> >>> El vie., 3 de jul. de 2020 04:33, Alexis Roda < >>> alexis.roda.villalonga en gmail.com> escribió: >>> >>>> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >>>> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >>>> problema. >>>> >>>> En el otro mensaje, al cambiar "main" por "cod" el error era "int value >>>> is not subscriptable" (o algo parecido), eso nos dice que el valor asociado >>>> a la clave "cod" es un número (habría que confirmarlo con la documentación >>>> de la API) pero el programa lo trata como una cadena (en el if >>>> x["cod"] != "404"). El número 404 y la cadena "404" comparan >>>> como distintos. No sé si tiene que ver con el KeyError main pero es un >>>> error que habría que corregir. Relacionado con esto, no parece buena idea >>>> asumir que si el código es distinto de 404 la petición ha ido bien. >>>> Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 >>>> procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino >>>> imprime "error desconocido". >>>> >>>> Me llama la atención que el script utilice el paquete requests para >>>> luego acabar construyendo la URL a mano. Por otro lado la URL que construye >>>> no parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >>>> >>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>> >>>> >>>> al final complete_url vale >>>> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >>>> Creo que deberia ser algo mas parecido a >>>> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >>>> . >>>> >>>> Usando requests de forma correcta te quitas problemas: >>>> >>>> url = "http://api.openweathermap.org/data/2.5/weather >>>> " >>>> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >>>> "appid": api_key}) >>>> >>>> >>>> añadirá el ? y los & donde corresponda, codificará correctamente los >>>> valores y no quedarán valores "desparejados" ni claves duplicadas. >>>> >>>> Visto todo esto sigo pensando que el problema es una mala petición a la >>>> API que devuelve un código de error que no es gestionado correctamente. >>>> >>>> Respecto a que el problema se produzca cuando escribes el programa a >>>> mano y que funciona si copias/pegas. En caso que no sea un error evidente >>>> en la transcripción y que el valor de x no te dé ninguna pista, los IDE >>>> suelen incluir alguna herramienta para comparar archivos. Comparalos y >>>> encuentra que los hace diferentes y puede causar el problema. >>>> >>>> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >>>> >>>> Creo que es excesivo para este problema pero es otra herramienta que >>>> puede ser útil. >>>> >>>> >>>> Saludos >>>> >>>> Missatge de Lemarchand Barker del dia dv., >>>> 3 de jul. 2020 a les 1:22: >>>> >>>>> Hola, el código de api key funciona, porque me registré y lo usé y >>>>> funcionó. >>>>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>>>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>>>> funcionaba perfecto. Lo saqué de acá: >>>>> https://openweathermap.org/current. Lo del multilingual está ya casi >>>>> al final de la página. >>>>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que >>>>> es la misma que figura en la página. Reitero, el problema me salta cada vez >>>>> que copio el código de forma manual, con copy-paste ningún problema. >>>>> Saludos >>>>> >>>>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>>>> python-es en python.org>) escribió: >>>>> >>>>>> Vero, >>>>>> >>>>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la >>>>>> variable url como cuando generas complete_url y creo que no deberían ir >>>>>> allí, aunque no he podido checarlo por lo de la llave API. >>>>>> >>>>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>>>> lemarchand8679 en gmail.com) escribió: >>>>>> >>>>>>> Hola, este es mi código: >>>>>>> >>>>>>> import requests >>>>>>> import json >>>>>>> >>>>>>> api_key = "API_KEY" >>>>>>> >>>>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>>>> >>>>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>>>> >>>>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>>>> >>>>>>> response = requests.get(complete_url) >>>>>>> >>>>>>> x = response.json() >>>>>>> >>>>>>> if x["cod"] != "404": >>>>>>> >>>>>>> y = x["main"] >>>>>>> >>>>>>> temperatura_actual = y["temp"] >>>>>>> >>>>>>> celsius = temperatura_actual - 273.15 >>>>>>> >>>>>>> presion_actual = y["pressure"] >>>>>>> >>>>>>> humedad_actual = y["humidity"] >>>>>>> >>>>>>> z = x["clima"] >>>>>>> >>>>>>> descripcion = z[0]["descripcion"] >>>>>>> >>>>>>> print(f"Temperatura: {celsius}°") >>>>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>>>> print(f"Humedad: {humedad_actual} %") >>>>>>> print(f"Descripción: {descripcion}") >>>>>>> >>>>>>> else: >>>>>>> print("Ciudad no encontrada") >>>>>>> >>>>>>> La salida es la siguiente: >>>>>>> >>>>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>>>> Ingrese nombre de la ciudad: Rosario >>>>>>> Traceback (most recent call last): >>>>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>>>> >>>>>>> y = x["main"] >>>>>>> KeyError: 'main' >>>>>>> >>>>>>> El código original es este: >>>>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>>>> >>>>>>> >>>>>>> Saludos y gracias >>>>>>> >>>>>>> >>>>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>>>> > >>>>>>> > Hola, >>>>>>> > >>>>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>>>> cadenas. >>>>>>> > >>>>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que >>>>>>> el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>>>> > >>>>>>> > Si es así mira la función strip >>>>>>> > >>>>>>> > Un saludo >>>>>>> > >>>>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 < >>>>>>> lemarchand8679 en gmail.com> escribió: >>>>>>> >> >>>>>>> >> Hola, había escrito para comentar que había solucionado el >>>>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>>>> verdad no se por qué, alguna idea? Gracias >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>>>> >> >>>>>>> >> _______________________________________________ >>>>>>> >> Python-es mailing list >>>>>>> >> Python-es en python.org >>>>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>>>> > >>>>>>> > _______________________________________________ >>>>>>> > Python-es mailing list >>>>>>> > Python-es en python.org >>>>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es en python.org >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es en python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : image.png Tipo : image/png Tamaño : 428316 bytes Descripción: no disponible Url : From lemarchand8679 en gmail.com Mon Jul 6 09:18:55 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Mon, 06 Jul 2020 10:18:55 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: Message-ID: <5f0324c3.1c69fb81.cdca4.a5a4@mx.google.com> Hola Sebastián, si para cada proyectito le creo una carpeta. Alguna que otra vez usé para debugear.También vi que le puedo decir a PyCharm que omita cosas que están bien y que me marca para que las arregle. Pero mi duda es la siguiente, si yo le digo que esa línea de código está bien, ese cambio aplica a lo que venga? Porque puede que por configurarlo así después no me marque cosas que me resulten importantes.SaludosEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Sebastián Arancibia Fecha: 6/7/20 04:13 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Sobre keyerror Hola Verónica (y a todos),Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, te recomiendo que incluyas tu desarrollo dentro de un main. Así podrás ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main puedes ejecutarlo con el botón "play", y arriba te sale el nombre del script y varios botones: play, debug, correr tests y uno de stop. El segundo te permite debuggear y puedes marcar puntos de quiebre al costado de cada linea. Abajo te salen los valores de las variables, es mucho más fácil a la hora de diagnosticar errores, ver los valores de las variables en todo momento y cosas así.Como aún no logro que me funcione la api key me sigue saliendo el mismo error de ayer, y se cae por eso. Después investigaré más y generaré otra api key para ver otros errores que aparezcan.Saludos. On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda wrote:Haz este cambio:print(complete_url)  # <<< añade esta línearesponse = requests.get(complete_url)Copia/pega lo que sale por pantalla.Missatge de lemarchand8679 del dia dv., 3 de jul. 2020 a les 19:40:Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece estar correcta, está validada y todo. Probé generando otra y lo mismo; keyerror.Enviado desde mi smartphone Samsung Galaxy.-------- Mensaje original --------De: Alexis Roda Fecha: 3/7/20 11:19 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Sobre keyerror Tiendo a dar demasiada información y perderme en detalles. La parte relevante de mi respuesta es cuando digo que el número 404 y la cadena "404" comparan como distintos. En Python, si comparas un número (un int) y una cadena (un str) el resultado es que siempre son distintos, independientemente de su valor. Esto implica que la rama del else jamás se ejecuta, no importa qué código de respuesta devuelve la API, siempre se ejecuta la rama del then. Esto es un problema cuando la respuesta es no-OK y no contiene la clave "main".Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123",  ...}. La confirmación definitiva sería la documentación de la API, la especificación del formato de la respuesta.Con "la forma correcta" quería decir "la forma recomendada". requests ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya que se importa se me hace extraño no aprovecharlos.También te recomiendo que revises la gestión de errores, parece frágil. Imagino que si el código de respuesta es distingo de 404 no significa necesariamente que la petición ha ido bien. Confirmalo con la documentación de la API.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 13:36:Buenas gracias a todos por sus aportes. Si, me llamo Verónica.En respuesta a Alexis, puede ser una forma incorrecta de realizar la consulta pero cuando hice copy-paste, al probar con distintas localidades funcionó. Tengo que mirar la info para desarrolladores que tiene más detenidamente, no es larga.Yo al 404 lo entiendo como el de page not found, de ahí que el else te diga que no encontró la ciudad. No encuentra la página con la información de esa localidad.El vie., 3 de jul. de 2020 04:33, Alexis Roda escribió:Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del problema.En el otro mensaje, al cambiar "main" por "cod" el error era "int value is not subscriptable" (o algo parecido), eso nos dice que el valor asociado a la clave "cod" es un número (habría que confirmarlo con la documentación de la API) pero el programa lo trata como una cadena (en el if x["cod"] != "404"). El número 404 y la cadena "404" comparan como distintos. No sé si tiene que ver con el KeyError main pero es un error que habría que corregir. Relacionado con esto, no parece buena idea asumir que si el código es distinto de 404 la petición ha ido bien. Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino imprime "error desconocido".Me llama la atención que el script utilice el paquete requests para luego acabar construyendo la URL a mano. Por otro lado la URL que construye no parece muy correcta. Suponiendo que nombre_ciudad sea FOO:url = "http://api.openweathermap.org/data/2.5/weather?q=sp"complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadal final complete_url vale http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. Creo que deberia ser algo mas parecido a http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp.Usando requests de forma correcta te quitas problemas:url = "http://api.openweathermap.org/data/2.5/weather"response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", "appid": api_key})añadirá el ? y los & donde corresponda, codificará correctamente los valores y no quedarán valores "desparejados" ni claves duplicadas.Visto todo esto sigo pensando que el problema es una mala petición a la API que devuelve un código de error que no es gestionado correctamente.Respecto a que el problema se produzca cuando escribes el programa a mano y que funciona si copias/pegas. En caso que no sea un error evidente en la transcripción y que el valor de x no te dé ninguna pista, los IDE suelen incluir alguna herramienta para comparar archivos. Comparalos y encuentra que los hace diferentes y puede causar el problema.https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.htmlCreo que es excesivo para este problema pero es otra herramienta que puede ser útil.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 1:22:Hola, el código de api key funciona, porque me registré y lo usé y funcionó.Lo de sp fue más que nada para probar, corresponde al Multilingual support. Incluso cuando hice copy-paste del código sin usar el sp, funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. Lo del multilingual está ya casi al final de la página.La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es la misma que figura en la página. Reitero, el problema me salta cada vez que copio el código de forma manual, con copy-paste ningún problema.SaludosEl jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es () escribió:Vero,el problema que veo es que tienes la cadena "sp" de sobra tanto en la variable url como cuando generas complete_url y creo que no deberían ir allí, aunque no he podido checarlo por lo de la llave API.El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker (lemarchand8679 en gmail.com) escribió:Hola, este es mi código:import requestsimport jsonapi_key = "API_KEY"url = "http://api.openweathermap.org/data/2.5/weather?q=sp"nombre_ciudad = input("Ingrese nombre de la ciudad: ")complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadresponse = requests.get(complete_url)x = response.json()if x["cod"] != "404":    y = x["main"]    temperatura_actual = y["temp"]    celsius = temperatura_actual - 273.15    presion_actual = y["pressure"]    humedad_actual = y["humidity"]    z = x["clima"]    descripcion = z[0]["descripcion"]    print(f"Temperatura: {celsius}°")    print(f"Presión atmosférica: {presion_actual} hPa")    print(f"Humedad: {humedad_actual} %")    print(f"Descripción: {descripcion}")else:    print("Ciudad no encontrada")La salida es la siguiente:/usr/bin/python3.8 /home/raiden/Programacion/weather/weather.pyIngrese nombre de la ciudad: RosarioTraceback (most recent call last):  File "/home/raiden/Programacion/weather/weather.py", line 18, in     y = x["main"]KeyError: 'main'El código original es este: Python-find-current-weather-of-any-city-using-openweathermap-api/Saludos y graciasEl jue., 2 jul. 2020 a las 18:20, Gerardo Diez () escribió:>> Hola,>> No soy precisamente un experto, pero yo normalmente voy poniendo prints /liga por todos lados para que me vaya mostrando el contenido de las cadenas.>> No recuerdo muy bien el funcionamiento de input pero puede ser que el string que se esté incorporando lleve un salto de línea final ( \n)?>> Si es así mira la función strip>> Un saludo>> El jue., 2 jul. 2020 22:01, lemarchand8679 escribió:>>>> Hola, había escrito para comentar que había solucionado el inconveniente de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 para hacer algunas modificaciones, me tira ese error al introducir una ciudad, y si hago un copy-paste del código funciona y la verdad no se por qué, alguna idea? Gracias>>>>>>>> Enviado desde mi smartphone Samsung Galaxy.>>>> _______________________________________________>> Python-es mailing list>> Python-es en python.org>> https://mail.python.org/mailman/listinfo/python-es>> _______________________________________________> Python-es mailing list> Python-es en python.org> https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 8 08:21:17 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Wed, 8 Jul 2020 09:21:17 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: <5f0324c3.1c69fb81.cdca4.a5a4@mx.google.com> References: <5f0324c3.1c69fb81.cdca4.a5a4@mx.google.com> Message-ID: Hola, estaba terminando un ejemplo en kivy y me pensé en el otro que hice, el del clima. Y si no me equivoco fue tan simple y tonta lo que; creo; fue la solución. El archivo se llamaba en mi caso: tiempo.py. Lo que hice fue cambiarlo a main.py y lo probé unas cuantas veces y funcionó. El código sigue intacto, solo cambié el nombre. Saludos El lun., 6 jul. 2020 a las 10:18, lemarchand8679 () escribió: > Hola Sebastián, si para cada proyectito le creo una carpeta. Alguna que > otra vez usé para debugear. > También vi que le puedo decir a PyCharm que omita cosas que están bien y > que me marca para que las arregle. Pero mi duda es la siguiente, si yo le > digo que esa línea de código está bien, ese cambio aplica a lo que venga? > Porque puede que por configurarlo así después no me marque cosas que me > resulten importantes. > Saludos > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Sebastián Arancibia > Fecha: 6/7/20 04:13 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Sobre keyerror > > Hola Verónica (y a todos), > > Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, te > recomiendo que incluyas tu desarrollo dentro de un main. Así podrás > ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main > puedes ejecutarlo con el botón "play", y arriba te sale el nombre del > script y varios botones: play, debug, correr tests y uno de stop. El > segundo te permite debuggear y puedes marcar puntos de quiebre al costado > de cada linea. Abajo te salen los valores de las variables, es mucho más > fácil a la hora de diagnosticar errores, ver los valores de las variables > en todo momento y cosas así. > > [image: image.png] > > Como aún no logro que me funcione la api key me sigue saliendo el mismo > error de ayer, y se cae por eso. Después investigaré más y generaré otra > api key para ver otros errores que aparezcan. > > Saludos. > > > On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda < > alexis.roda.villalonga en gmail.com> wrote: > >> Haz este cambio: >> >> print(complete_url) # <<< añade esta línea >> response = requests.get(complete_url) >> >> >> Copia/pega lo que sale por pantalla. >> >> >> Missatge de lemarchand8679 del dia dv., 3 de >> jul. 2020 a les 19:40: >> >>> Hice como me habían comentado antes, lo de hacer print en x. Lo hice y >>> da el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece >>> estar correcta, está validada y todo. Probé generando otra y lo mismo; >>> keyerror. >>> >>> >>> >>> Enviado desde mi smartphone Samsung Galaxy. >>> >>> >>> -------- Mensaje original -------- >>> De: Alexis Roda >>> Fecha: 3/7/20 11:19 (GMT-03:00) >>> A: La lista de python en castellano >>> Asunto: Re: [Python-es] [Consulta] Sobre keyerror >>> >>> Tiendo a dar demasiada información y perderme en detalles. La parte >>> relevante de mi respuesta es cuando digo que el número 404 y la cadena >>> "404" comparan como distintos. En Python, si comparas un número (un int) y >>> una cadena (un str) el resultado es que siempre son distintos, >>> independientemente de su valor. Esto implica que *la rama del else >>> jamás se ejecuta*, no importa qué código de respuesta devuelve la API, >>> siempre se ejecuta la rama del then. Esto es un problema cuando la >>> respuesta es no-OK y no contiene la clave "main". >>> >>> Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en >>> lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", ...}. La >>> confirmación definitiva sería la documentación de la API, la especificación >>> del formato de la respuesta. >>> >>> Con "la forma correcta" quería decir "la forma recomendada". requests >>> ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya >>> que se importa se me hace extraño no aprovecharlos. >>> >>> También te recomiendo que revises la gestión de errores, parece frágil. >>> Imagino que si el código de respuesta es distingo de 404 no significa >>> necesariamente que la petición ha ido bien. Confirmalo con la documentación >>> de la API. >>> >>> >>> Saludos >>> >>> Missatge de Lemarchand Barker del dia dv., 3 >>> de jul. 2020 a les 13:36: >>> >>>> Buenas gracias a todos por sus aportes. Si, me llamo Verónica. >>>> En respuesta a Alexis, puede ser una forma incorrecta de realizar la >>>> consulta pero cuando hice copy-paste, al probar con distintas localidades >>>> funcionó. Tengo que mirar la info para desarrolladores que tiene más >>>> detenidamente, no es larga. >>>> Yo al 404 lo entiendo como el de page not found, de ahí que el else te >>>> diga que no encontró la ciudad. No encuentra la página con la información >>>> de esa localidad. >>>> >>>> >>>> >>>> El vie., 3 de jul. de 2020 04:33, Alexis Roda < >>>> alexis.roda.villalonga en gmail.com> escribió: >>>> >>>>> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >>>>> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >>>>> problema. >>>>> >>>>> En el otro mensaje, al cambiar "main" por "cod" el error era "int >>>>> value is not subscriptable" (o algo parecido), eso nos dice que el valor >>>>> asociado a la clave "cod" es un número (habría que confirmarlo con la >>>>> documentación de la API) pero el programa lo trata como una cadena (en el if >>>>> x["cod"] != "404"). El número 404 y la cadena "404" comparan >>>>> como distintos. No sé si tiene que ver con el KeyError main pero es un >>>>> error que habría que corregir. Relacionado con esto, no parece buena idea >>>>> asumir que si el código es distinto de 404 la petición ha ido bien. >>>>> Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 >>>>> procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino >>>>> imprime "error desconocido". >>>>> >>>>> Me llama la atención que el script utilice el paquete requests para >>>>> luego acabar construyendo la URL a mano. Por otro lado la URL que construye >>>>> no parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >>>>> >>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>> >>>>> >>>>> al final complete_url vale >>>>> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >>>>> Creo que deberia ser algo mas parecido a >>>>> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >>>>> . >>>>> >>>>> Usando requests de forma correcta te quitas problemas: >>>>> >>>>> url = "http://api.openweathermap.org/data/2.5/weather >>>>> " >>>>> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >>>>> "appid": api_key}) >>>>> >>>>> >>>>> añadirá el ? y los & donde corresponda, codificará correctamente los >>>>> valores y no quedarán valores "desparejados" ni claves duplicadas. >>>>> >>>>> Visto todo esto sigo pensando que el problema es una mala petición a >>>>> la API que devuelve un código de error que no es gestionado correctamente. >>>>> >>>>> Respecto a que el problema se produzca cuando escribes el programa a >>>>> mano y que funciona si copias/pegas. En caso que no sea un error evidente >>>>> en la transcripción y que el valor de x no te dé ninguna pista, los IDE >>>>> suelen incluir alguna herramienta para comparar archivos. Comparalos y >>>>> encuentra que los hace diferentes y puede causar el problema. >>>>> >>>>> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >>>>> >>>>> Creo que es excesivo para este problema pero es otra herramienta que >>>>> puede ser útil. >>>>> >>>>> >>>>> Saludos >>>>> >>>>> Missatge de Lemarchand Barker del dia dv., >>>>> 3 de jul. 2020 a les 1:22: >>>>> >>>>>> Hola, el código de api key funciona, porque me registré y lo usé y >>>>>> funcionó. >>>>>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>>>>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>>>>> funcionaba perfecto. Lo saqué de acá: >>>>>> https://openweathermap.org/current. Lo del multilingual está ya casi >>>>>> al final de la página. >>>>>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que >>>>>> es la misma que figura en la página. Reitero, el problema me salta cada vez >>>>>> que copio el código de forma manual, con copy-paste ningún problema. >>>>>> Saludos >>>>>> >>>>>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>>>>> python-es en python.org>) escribió: >>>>>> >>>>>>> Vero, >>>>>>> >>>>>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en >>>>>>> la variable url como cuando generas complete_url y creo que no deberían ir >>>>>>> allí, aunque no he podido checarlo por lo de la llave API. >>>>>>> >>>>>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>>>>> lemarchand8679 en gmail.com) escribió: >>>>>>> >>>>>>>> Hola, este es mi código: >>>>>>>> >>>>>>>> import requests >>>>>>>> import json >>>>>>>> >>>>>>>> api_key = "API_KEY" >>>>>>>> >>>>>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>>>>> >>>>>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>>>>> >>>>>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>>>>> >>>>>>>> response = requests.get(complete_url) >>>>>>>> >>>>>>>> x = response.json() >>>>>>>> >>>>>>>> if x["cod"] != "404": >>>>>>>> >>>>>>>> y = x["main"] >>>>>>>> >>>>>>>> temperatura_actual = y["temp"] >>>>>>>> >>>>>>>> celsius = temperatura_actual - 273.15 >>>>>>>> >>>>>>>> presion_actual = y["pressure"] >>>>>>>> >>>>>>>> humedad_actual = y["humidity"] >>>>>>>> >>>>>>>> z = x["clima"] >>>>>>>> >>>>>>>> descripcion = z[0]["descripcion"] >>>>>>>> >>>>>>>> print(f"Temperatura: {celsius}°") >>>>>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>>>>> print(f"Humedad: {humedad_actual} %") >>>>>>>> print(f"Descripción: {descripcion}") >>>>>>>> >>>>>>>> else: >>>>>>>> print("Ciudad no encontrada") >>>>>>>> >>>>>>>> La salida es la siguiente: >>>>>>>> >>>>>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>>>>> Ingrese nombre de la ciudad: Rosario >>>>>>>> Traceback (most recent call last): >>>>>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>>>>> >>>>>>>> y = x["main"] >>>>>>>> KeyError: 'main' >>>>>>>> >>>>>>>> El código original es este: >>>>>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>>>>> >>>>>>>> >>>>>>>> Saludos y gracias >>>>>>>> >>>>>>>> >>>>>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>>>>> > >>>>>>>> > Hola, >>>>>>>> > >>>>>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>>>>> cadenas. >>>>>>>> > >>>>>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser >>>>>>>> que el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>>>>> > >>>>>>>> > Si es así mira la función strip >>>>>>>> > >>>>>>>> > Un saludo >>>>>>>> > >>>>>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 < >>>>>>>> lemarchand8679 en gmail.com> escribió: >>>>>>>> >> >>>>>>>> >> Hola, había escrito para comentar que había solucionado el >>>>>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>>>>> verdad no se por qué, alguna idea? Gracias >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>>>>> >> >>>>>>>> >> _______________________________________________ >>>>>>>> >> Python-es mailing list >>>>>>>> >> Python-es en python.org >>>>>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> > >>>>>>>> > _______________________________________________ >>>>>>>> > Python-es mailing list >>>>>>>> > Python-es en python.org >>>>>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>>>>> _______________________________________________ >>>>>>>> Python-es mailing list >>>>>>>> Python-es en python.org >>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es en python.org >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es en python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : tiempo.png Tipo : image/png Tamaño : 25282 bytes Descripción: no disponible Url : From david.suarez en yahoo.com Wed Jul 8 10:05:30 2020 From: david.suarez en yahoo.com (=?UTF-8?Q?David_Su=C3=A1rez?=) Date: Wed, 8 Jul 2020 09:05:30 -0500 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: References: <5f0324c3.1c69fb81.cdca4.a5a4@mx.google.com> Message-ID: Hola, ese no puede ser el error que había, pues a menos que explícitamente extraigas el nombre del archivo que estás ejecutando y lo uses para algo, a Python no le importa en absoluto el nombre del archivo. Si no hiciste ningún otro cambio y ahora funciona "mágicamente" entonces quizás el problema no estaba en tu código, sino en el servidor, que no estaba respondiendo adecuadamente. Es raro si se trata de un servicio bien establecido, pero te aseguro que pasa incluso con las APIs de Google o Twitter. Saludos, David El mié., 8 de julio de 2020 7:22, Lemarchand Barker < lemarchand8679 en gmail.com> escribió: > Hola, estaba terminando un ejemplo en kivy y me pensé en el otro que hice, > el del clima. Y si no me equivoco fue tan simple y tonta lo que; creo; fue > la solución. El archivo se llamaba en mi caso: tiempo.py. Lo que hice fue > cambiarlo a main.py y lo probé unas cuantas veces y funcionó. > El código sigue intacto, solo cambié el nombre. > Saludos > > El lun., 6 jul. 2020 a las 10:18, lemarchand8679 (< > lemarchand8679 en gmail.com>) escribió: > >> Hola Sebastián, si para cada proyectito le creo una carpeta. Alguna que >> otra vez usé para debugear. >> También vi que le puedo decir a PyCharm que omita cosas que están bien y >> que me marca para que las arregle. Pero mi duda es la siguiente, si yo le >> digo que esa línea de código está bien, ese cambio aplica a lo que venga? >> Porque puede que por configurarlo así después no me marque cosas que me >> resulten importantes. >> Saludos >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> -------- Mensaje original -------- >> De: Sebastián Arancibia >> Fecha: 6/7/20 04:13 (GMT-03:00) >> A: La lista de python en castellano >> Asunto: Re: [Python-es] [Consulta] Sobre keyerror >> >> Hola Verónica (y a todos), >> >> Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, >> te recomiendo que incluyas tu desarrollo dentro de un main. Así podrás >> ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main >> puedes ejecutarlo con el botón "play", y arriba te sale el nombre del >> script y varios botones: play, debug, correr tests y uno de stop. El >> segundo te permite debuggear y puedes marcar puntos de quiebre al costado >> de cada linea. Abajo te salen los valores de las variables, es mucho más >> fácil a la hora de diagnosticar errores, ver los valores de las variables >> en todo momento y cosas así. >> >> [image: image.png] >> >> Como aún no logro que me funcione la api key me sigue saliendo el mismo >> error de ayer, y se cae por eso. Después investigaré más y generaré otra >> api key para ver otros errores que aparezcan. >> >> Saludos. >> >> >> On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda < >> alexis.roda.villalonga en gmail.com> wrote: >> >>> Haz este cambio: >>> >>> print(complete_url) # <<< añade esta línea >>> response = requests.get(complete_url) >>> >>> >>> Copia/pega lo que sale por pantalla. >>> >>> >>> Missatge de lemarchand8679 del dia dv., 3 de >>> jul. 2020 a les 19:40: >>> >>>> Hice como me habían comentado antes, lo de hacer print en x. Lo hice y >>>> da el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece >>>> estar correcta, está validada y todo. Probé generando otra y lo mismo; >>>> keyerror. >>>> >>>> >>>> >>>> Enviado desde mi smartphone Samsung Galaxy. >>>> >>>> >>>> -------- Mensaje original -------- >>>> De: Alexis Roda >>>> Fecha: 3/7/20 11:19 (GMT-03:00) >>>> A: La lista de python en castellano >>>> Asunto: Re: [Python-es] [Consulta] Sobre keyerror >>>> >>>> Tiendo a dar demasiada información y perderme en detalles. La parte >>>> relevante de mi respuesta es cuando digo que el número 404 y la cadena >>>> "404" comparan como distintos. En Python, si comparas un número (un int) y >>>> una cadena (un str) el resultado es que siempre son distintos, >>>> independientemente de su valor. Esto implica que *la rama del else >>>> jamás se ejecuta*, no importa qué código de respuesta devuelve la API, >>>> siempre se ejecuta la rama del then. Esto es un problema cuando la >>>> respuesta es no-OK y no contiene la clave "main". >>>> >>>> Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy >>>> en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", ...}. La >>>> confirmación definitiva sería la documentación de la API, la especificación >>>> del formato de la respuesta. >>>> >>>> Con "la forma correcta" quería decir "la forma recomendada". requests >>>> ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya >>>> que se importa se me hace extraño no aprovecharlos. >>>> >>>> También te recomiendo que revises la gestión de errores, parece frágil. >>>> Imagino que si el código de respuesta es distingo de 404 no significa >>>> necesariamente que la petición ha ido bien. Confirmalo con la documentación >>>> de la API. >>>> >>>> >>>> Saludos >>>> >>>> Missatge de Lemarchand Barker del dia dv., >>>> 3 de jul. 2020 a les 13:36: >>>> >>>>> Buenas gracias a todos por sus aportes. Si, me llamo Verónica. >>>>> En respuesta a Alexis, puede ser una forma incorrecta de realizar la >>>>> consulta pero cuando hice copy-paste, al probar con distintas localidades >>>>> funcionó. Tengo que mirar la info para desarrolladores que tiene más >>>>> detenidamente, no es larga. >>>>> Yo al 404 lo entiendo como el de page not found, de ahí que el else te >>>>> diga que no encontró la ciudad. No encuentra la página con la información >>>>> de esa localidad. >>>>> >>>>> >>>>> >>>>> El vie., 3 de jul. de 2020 04:33, Alexis Roda < >>>>> alexis.roda.villalonga en gmail.com> escribió: >>>>> >>>>>> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no >>>>>> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del >>>>>> problema. >>>>>> >>>>>> En el otro mensaje, al cambiar "main" por "cod" el error era "int >>>>>> value is not subscriptable" (o algo parecido), eso nos dice que el valor >>>>>> asociado a la clave "cod" es un número (habría que confirmarlo con la >>>>>> documentación de la API) pero el programa lo trata como una cadena (en el if >>>>>> x["cod"] != "404"). El número 404 y la cadena "404" comparan >>>>>> como distintos. No sé si tiene que ver con el KeyError main pero es un >>>>>> error que habría que corregir. Relacionado con esto, no parece buena idea >>>>>> asumir que si el código es distinto de 404 la petición ha ido bien. >>>>>> Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 >>>>>> procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino >>>>>> imprime "error desconocido". >>>>>> >>>>>> Me llama la atención que el script utilice el paquete requests para >>>>>> luego acabar construyendo la URL a mano. Por otro lado la URL que construye >>>>>> no parece muy correcta. Suponiendo que nombre_ciudad sea FOO: >>>>>> >>>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>>> >>>>>> >>>>>> al final complete_url vale >>>>>> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. >>>>>> Creo que deberia ser algo mas parecido a >>>>>> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp >>>>>> . >>>>>> >>>>>> Usando requests de forma correcta te quitas problemas: >>>>>> >>>>>> url = "http://api.openweathermap.org/data/2.5/weather >>>>>> " >>>>>> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", >>>>>> "appid": api_key}) >>>>>> >>>>>> >>>>>> añadirá el ? y los & donde corresponda, codificará correctamente los >>>>>> valores y no quedarán valores "desparejados" ni claves duplicadas. >>>>>> >>>>>> Visto todo esto sigo pensando que el problema es una mala petición a >>>>>> la API que devuelve un código de error que no es gestionado correctamente. >>>>>> >>>>>> Respecto a que el problema se produzca cuando escribes el programa a >>>>>> mano y que funciona si copias/pegas. En caso que no sea un error evidente >>>>>> en la transcripción y que el valor de x no te dé ninguna pista, los IDE >>>>>> suelen incluir alguna herramienta para comparar archivos. Comparalos y >>>>>> encuentra que los hace diferentes y puede causar el problema. >>>>>> >>>>>> >>>>>> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html >>>>>> >>>>>> Creo que es excesivo para este problema pero es otra herramienta que >>>>>> puede ser útil. >>>>>> >>>>>> >>>>>> Saludos >>>>>> >>>>>> Missatge de Lemarchand Barker del dia >>>>>> dv., 3 de jul. 2020 a les 1:22: >>>>>> >>>>>>> Hola, el código de api key funciona, porque me registré y lo usé y >>>>>>> funcionó. >>>>>>> Lo de sp fue más que nada para probar, corresponde al Multilingual >>>>>>> support. Incluso cuando hice copy-paste del código sin usar el sp, >>>>>>> funcionaba perfecto. Lo saqué de acá: >>>>>>> https://openweathermap.org/current. Lo del multilingual está ya >>>>>>> casi al final de la página. >>>>>>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? >>>>>>> que es la misma que figura en la página. Reitero, el problema me salta cada >>>>>>> vez que copio el código de forma manual, con copy-paste ningún problema. >>>>>>> Saludos >>>>>>> >>>>>>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (< >>>>>>> python-es en python.org>) escribió: >>>>>>> >>>>>>>> Vero, >>>>>>>> >>>>>>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en >>>>>>>> la variable url como cuando generas complete_url y creo que no deberían ir >>>>>>>> allí, aunque no he podido checarlo por lo de la llave API. >>>>>>>> >>>>>>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker ( >>>>>>>> lemarchand8679 en gmail.com) escribió: >>>>>>>> >>>>>>>>> Hola, este es mi código: >>>>>>>>> >>>>>>>>> import requests >>>>>>>>> import json >>>>>>>>> >>>>>>>>> api_key = "API_KEY" >>>>>>>>> >>>>>>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp" >>>>>>>>> >>>>>>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ") >>>>>>>>> >>>>>>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad >>>>>>>>> >>>>>>>>> response = requests.get(complete_url) >>>>>>>>> >>>>>>>>> x = response.json() >>>>>>>>> >>>>>>>>> if x["cod"] != "404": >>>>>>>>> >>>>>>>>> y = x["main"] >>>>>>>>> >>>>>>>>> temperatura_actual = y["temp"] >>>>>>>>> >>>>>>>>> celsius = temperatura_actual - 273.15 >>>>>>>>> >>>>>>>>> presion_actual = y["pressure"] >>>>>>>>> >>>>>>>>> humedad_actual = y["humidity"] >>>>>>>>> >>>>>>>>> z = x["clima"] >>>>>>>>> >>>>>>>>> descripcion = z[0]["descripcion"] >>>>>>>>> >>>>>>>>> print(f"Temperatura: {celsius}°") >>>>>>>>> print(f"Presión atmosférica: {presion_actual} hPa") >>>>>>>>> print(f"Humedad: {humedad_actual} %") >>>>>>>>> print(f"Descripción: {descripcion}") >>>>>>>>> >>>>>>>>> else: >>>>>>>>> print("Ciudad no encontrada") >>>>>>>>> >>>>>>>>> La salida es la siguiente: >>>>>>>>> >>>>>>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py >>>>>>>>> Ingrese nombre de la ciudad: Rosario >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "/home/raiden/Programacion/weather/weather.py", line 18, in >>>>>>>>> >>>>>>>>> y = x["main"] >>>>>>>>> KeyError: 'main' >>>>>>>>> >>>>>>>>> El código original es este: >>>>>>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/ >>>>>>>>> >>>>>>>>> >>>>>>>>> Saludos y gracias >>>>>>>>> >>>>>>>>> >>>>>>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (< >>>>>>>>> gerardo.diez.garcia en gmail.com>) escribió: >>>>>>>>> > >>>>>>>>> > Hola, >>>>>>>>> > >>>>>>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo >>>>>>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las >>>>>>>>> cadenas. >>>>>>>>> > >>>>>>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser >>>>>>>>> que el string que se esté incorporando lleve un salto de línea final ( \n)? >>>>>>>>> > >>>>>>>>> > Si es así mira la función strip >>>>>>>>> > >>>>>>>>> > Un saludo >>>>>>>>> > >>>>>>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 < >>>>>>>>> lemarchand8679 en gmail.com> escribió: >>>>>>>>> >> >>>>>>>>> >> Hola, había escrito para comentar que había solucionado el >>>>>>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si >>>>>>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al >>>>>>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la >>>>>>>>> verdad no se por qué, alguna idea? Gracias >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> Enviado desde mi smartphone Samsung Galaxy. >>>>>>>>> >> >>>>>>>>> >> _______________________________________________ >>>>>>>>> >> Python-es mailing list >>>>>>>>> >> Python-es en python.org >>>>>>>>> >> https://mail.python.org/mailman/listinfo/python-es >>>>>>>>> > >>>>>>>>> > _______________________________________________ >>>>>>>>> > Python-es mailing list >>>>>>>>> > Python-es en python.org >>>>>>>>> > https://mail.python.org/mailman/listinfo/python-es >>>>>>>>> _______________________________________________ >>>>>>>>> Python-es mailing list >>>>>>>>> Python-es en python.org >>>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Python-es mailing list >>>>>>>> Python-es en python.org >>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es en python.org >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es en python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 8 10:10:31 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Wed, 08 Jul 2020 11:10:31 -0300 Subject: [Python-es] [Consulta] Sobre keyerror In-Reply-To: Message-ID: <5f05d3dc.1c69fb81.1166f.51b4@mx.google.com> Hola David, lo mismo pienso, siendo que seguí un código de una especie de space invaders, donde hay varios archivos .py, donde le indico a kivy que los cargue, están todos en la misma carpeta y funciona.Pero el hecho es que el error del main, no me figura.Enviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: David Suárez vía Python-es Fecha: 8/7/20 11:06 (GMT-03:00) A: La lista de python en castellano CC: David Suárez Asunto: Re: [Python-es] [Consulta] Sobre keyerror Hola,ese no puede ser el error que había, pues a menos que explícitamente extraigas el nombre del archivo que estás ejecutando y lo uses para algo, a Python no le importa en absoluto el nombre del archivo.Si no hiciste ningún otro cambio y ahora funciona "mágicamente" entonces quizás el problema no estaba en tu código, sino en el servidor, que no estaba respondiendo adecuadamente. Es raro si se trata de un servicio bien establecido, pero te aseguro que pasa incluso con las APIs de Google o Twitter.Saludos,DavidEl mié., 8 de julio de 2020 7:22, Lemarchand Barker escribió:Hola, estaba terminando un ejemplo en kivy y me pensé en el otro que hice, el del clima. Y si no me equivoco fue tan simple y tonta lo que; creo; fue la solución. El archivo se llamaba en mi caso: tiempo.py. Lo que hice fue cambiarlo a main.py y lo probé unas cuantas veces y funcionó.El código sigue intacto, solo cambié el nombre.SaludosEl lun., 6 jul. 2020 a las 10:18, lemarchand8679 () escribió:Hola Sebastián, si para cada proyectito le creo una carpeta. Alguna que otra vez usé para debugear.También vi que le puedo decir a PyCharm que omita cosas que están bien y que me marca para que las arregle. Pero mi duda es la siguiente, si yo le digo que esa línea de código está bien, ese cambio aplica a lo que venga? Porque puede que por configurarlo así después no me marque cosas que me resulten importantes.SaludosEnviado desde mi smartphone Samsung Galaxy.-------- Mensaje original --------De: Sebastián Arancibia Fecha: 6/7/20 04:13 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Sobre keyerror Hola Verónica (y a todos),Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, te recomiendo que incluyas tu desarrollo dentro de un main. Así podrás ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main puedes ejecutarlo con el botón "play", y arriba te sale el nombre del script y varios botones: play, debug, correr tests y uno de stop. El segundo te permite debuggear y puedes marcar puntos de quiebre al costado de cada linea. Abajo te salen los valores de las variables, es mucho más fácil a la hora de diagnosticar errores, ver los valores de las variables en todo momento y cosas así.Como aún no logro que me funcione la api key me sigue saliendo el mismo error de ayer, y se cae por eso. Después investigaré más y generaré otra api key para ver otros errores que aparezcan.Saludos. On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda wrote:Haz este cambio:print(complete_url)  # <<< añade esta línearesponse = requests.get(complete_url)Copia/pega lo que sale por pantalla.Missatge de lemarchand8679 del dia dv., 3 de jul. 2020 a les 19:40:Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da el erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece estar correcta, está validada y todo. Probé generando otra y lo mismo; keyerror.Enviado desde mi smartphone Samsung Galaxy.-------- Mensaje original --------De: Alexis Roda Fecha: 3/7/20 11:19 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Sobre keyerror Tiendo a dar demasiada información y perderme en detalles. La parte relevante de mi respuesta es cuando digo que el número 404 y la cadena "404" comparan como distintos. En Python, si comparas un número (un int) y una cadena (un str) el resultado es que siempre son distintos, independientemente de su valor. Esto implica que la rama del else jamás se ejecuta, no importa qué código de respuesta devuelve la API, siempre se ejecuta la rama del then. Esto es un problema cuando la respuesta es no-OK y no contiene la clave "main".Lo puedes confirmar fácilmente inspeccionando el valor de x. Si estoy en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123",  ...}. La confirmación definitiva sería la documentación de la API, la especificación del formato de la respuesta.Con "la forma correcta" quería decir "la forma recomendada". requests ofrece mecanismos para hacer lo mismo de forma más sencilla y robusta. Ya que se importa se me hace extraño no aprovecharlos.También te recomiendo que revises la gestión de errores, parece frágil. Imagino que si el código de respuesta es distingo de 404 no significa necesariamente que la petición ha ido bien. Confirmalo con la documentación de la API.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 13:36:Buenas gracias a todos por sus aportes. Si, me llamo Verónica.En respuesta a Alexis, puede ser una forma incorrecta de realizar la consulta pero cuando hice copy-paste, al probar con distintas localidades funcionó. Tengo que mirar la info para desarrolladores que tiene más detenidamente, no es larga.Yo al 404 lo entiendo como el de page not found, de ahí que el else te diga que no encontró la ciudad. No encuentra la página con la información de esa localidad.El vie., 3 de jul. de 2020 04:33, Alexis Roda escribió:Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del problema.En el otro mensaje, al cambiar "main" por "cod" el error era "int value is not subscriptable" (o algo parecido), eso nos dice que el valor asociado a la clave "cod" es un número (habría que confirmarlo con la documentación de la API) pero el programa lo trata como una cadena (en el if x["cod"] != "404"). El número 404 y la cadena "404" comparan como distintos. No sé si tiene que ver con el KeyError main pero es un error que habría que corregir. Relacionado con esto, no parece buena idea asumir que si el código es distinto de 404 la petición ha ido bien. Asumiendo que sean códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si cod == 404 imprime "no encontrado" ... sino imprime "error desconocido".Me llama la atención que el script utilice el paquete requests para luego acabar construyendo la URL a mano. Por otro lado la URL que construye no parece muy correcta. Suponiendo que nombre_ciudad sea FOO:url = "http://api.openweathermap.org/data/2.5/weather?q=sp"complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadal final complete_url vale http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. Creo que deberia ser algo mas parecido a http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp.Usando requests de forma correcta te quitas problemas:url = "http://api.openweathermap.org/data/2.5/weather"response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp", "appid": api_key})añadirá el ? y los & donde corresponda, codificará correctamente los valores y no quedarán valores "desparejados" ni claves duplicadas.Visto todo esto sigo pensando que el problema es una mala petición a la API que devuelve un código de error que no es gestionado correctamente.Respecto a que el problema se produzca cuando escribes el programa a mano y que funciona si copias/pegas. En caso que no sea un error evidente en la transcripción y que el valor de x no te dé ninguna pista, los IDE suelen incluir alguna herramienta para comparar archivos. Comparalos y encuentra que los hace diferentes y puede causar el problema.https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.htmlCreo que es excesivo para este problema pero es otra herramienta que puede ser útil.SaludosMissatge de Lemarchand Barker del dia dv., 3 de jul. 2020 a les 1:22:Hola, el código de api key funciona, porque me registré y lo usé y funcionó.Lo de sp fue más que nada para probar, corresponde al Multilingual support. Incluso cuando hice copy-paste del código sin usar el sp, funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. Lo del multilingual está ya casi al final de la página.La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es la misma que figura en la página. Reitero, el problema me salta cada vez que copio el código de forma manual, con copy-paste ningún problema.SaludosEl jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es () escribió:Vero,el problema que veo es que tienes la cadena "sp" de sobra tanto en la variable url como cuando generas complete_url y creo que no deberían ir allí, aunque no he podido checarlo por lo de la llave API.El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker (lemarchand8679 en gmail.com) escribió:Hola, este es mi código:import requestsimport jsonapi_key = "API_KEY"url = "http://api.openweathermap.org/data/2.5/weather?q=sp"nombre_ciudad = input("Ingrese nombre de la ciudad: ")complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudadresponse = requests.get(complete_url)x = response.json()if x["cod"] != "404":    y = x["main"]    temperatura_actual = y["temp"]    celsius = temperatura_actual - 273.15    presion_actual = y["pressure"]    humedad_actual = y["humidity"]    z = x["clima"]    descripcion = z[0]["descripcion"]    print(f"Temperatura: {celsius}°")    print(f"Presión atmosférica: {presion_actual} hPa")    print(f"Humedad: {humedad_actual} %")    print(f"Descripción: {descripcion}")else:    print("Ciudad no encontrada")La salida es la siguiente:/usr/bin/python3.8 /home/raiden/Programacion/weather/weather.pyIngrese nombre de la ciudad: RosarioTraceback (most recent call last):  File "/home/raiden/Programacion/weather/weather.py", line 18, in     y = x["main"]KeyError: 'main'El código original es este: Python-find-current-weather-of-any-city-using-openweathermap-api/Saludos y graciasEl jue., 2 jul. 2020 a las 18:20, Gerardo Diez () escribió:>> Hola,>> No soy precisamente un experto, pero yo normalmente voy poniendo prints /liga por todos lados para que me vaya mostrando el contenido de las cadenas.>> No recuerdo muy bien el funcionamiento de input pero puede ser que el string que se esté incorporando lleve un salto de línea final ( \n)?>> Si es así mira la función strip>> Un saludo>> El jue., 2 jul. 2020 22:01, lemarchand8679 escribió:>>>> Hola, había escrito para comentar que había solucionado el inconveniente de KeyError, y es cierto en parte. Digo en parte porque si escribo desde 0 para hacer algunas modificaciones, me tira ese error al introducir una ciudad, y si hago un copy-paste del código funciona y la verdad no se por qué, alguna idea? Gracias>>>>>>>> Enviado desde mi smartphone Samsung Galaxy.>>>> _______________________________________________>> Python-es mailing list>> Python-es en python.org>> https://mail.python.org/mailman/listinfo/python-es>> _______________________________________________> Python-es mailing list> Python-es en python.org> https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 9 21:55:24 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 9 Jul 2020 22:55:24 -0300 Subject: [Python-es] [Material] Kivy Message-ID: Buenas, esta vez escribo para compartir el material que estoy usando para aprender y entender algo de Kivy. Acá un github con ejemplos: Kivy book examples Esos ejemplos tienen unos 7 años aproximadamente pero sirven igual. Yo actualmente tengo Kivi 1.10.1 y creo que la última versión es la 1.10.2. Estos ejemplos se explican en el libro. Link: Kivy: Interactive applications in python freepdfbook Y acá los videos, aún no los terminé. Videos: Tutorial de Kivy en español Espero no haber roto alguna regla de la lista y que le sirva a alguien. Saludos ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From kachine en protonmail.com Fri Jul 10 06:28:45 2020 From: kachine en protonmail.com (kikocorreoso) Date: Fri, 10 Jul 2020 10:28:45 +0000 Subject: [Python-es] [Material] Kivy In-Reply-To: References: Message-ID: ??????? Original Message ??????? On Friday, 10 de July de 2020 3:55, Lemarchand Barker wrote: > Buenas, esta vez escribo para compartir el material que estoy usando para aprender y entender algo de Kivy. > Acá un github con ejemplos: [Kivy book examples](https://github.com/robertour/kivy-book-examples) > Esos ejemplos tienen unos 7 años aproximadamente pero sirven igual. Yo actualmente tengo Kivi 1.10.1 y creo que la última versión es la 1.10.2. > Estos ejemplos se explican en el libro. Link: [Kivy: Interactive applications in python freepdfbook](https://freepdf-books.com/kivy-interactive-applications-in-python-freepdfbook/) Lo ideal sería no enlazar material pirateado. > Y acá los videos, aún no los terminé. Videos: [Tutorial de Kivy en español](https://www.youtube.com/watch?v=9F_bw8OP1f0&list=PLOBq4FLbvJGQA31Zhfnha3KKhG6xjZ1cz) > Espero no haber roto alguna regla de la lista y que le sirva a alguien. > Saludos Saludos. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 10 06:54:50 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Fri, 10 Jul 2020 07:54:50 -0300 Subject: [Python-es] [Material] Kivy In-Reply-To: Message-ID: <5f0848fd.1c69fb81.713e0.cbc8@mx.google.com> Perfecto, gracias.Enviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: kikocorreoso vía Python-es Fecha: 10/7/20 07:30 (GMT-03:00) A: La lista de python en castellano CC: kikocorreoso Asunto: Re: [Python-es] [Material] Kivy ??????? Original Message ??????? On Friday, 10 de July de 2020 3:55, Lemarchand Barker wrote: Buenas, esta vez escribo para compartir el material que estoy usando para aprender y entender algo de Kivy.Acá un github con ejemplos: Kivy book examplesEsos ejemplos tienen unos 7 años aproximadamente pero sirven igual. Yo actualmente tengo Kivi 1.10.1 y creo que la última versión es la 1.10.2.Estos ejemplos se explican en el libro: Kivy: Interactive applications in python de Robert Ulloa.Lo ideal sería no enlazar material pirateado.Y acá los videos, aún no los terminé. Videos: Tutorial de Kivy en españolEspero no haber roto alguna regla de la lista y que le sirva a alguien.SaludosSaludos. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From javierperez en perasalvino.es Sat Jul 11 06:37:02 2020 From: javierperez en perasalvino.es (Javier Perez) Date: Sat, 11 Jul 2020 12:37:02 +0200 Subject: [Python-es] Problemas a la hora de recorrer un CVS Message-ID: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> Hola a todos, buenos días, Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de entender donde esta el problema. Tengo dos CSV que los importo y hasta ese punto sin problemas. Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. Si coinciden en el código del isbn empieza a hacer una serie de cálculos. Bien, pues solo me recorre una vez ?movimientos?, la primera. Os pongo los trozos de código: movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) print("Leyendo fondo: ") for fondo in fondos_csv: for movimiento in movimientos_csv: print("dentro de movimiento") print("For exterior") Y esto sale por el terminal: dentro de movimiento dentro de movimiento dentro de movimiento dentro de movimiento For exterior For exterior For exterior For exterior For exterior For exterior For exterior For exterior For exterior For exterior For exterior Y entiendo que tenia que salir: dentro de movimiento dentro de movimiento dentro de movimiento dentro de movimiento For exterior dentro de movimiento dentro de movimiento dentro de movimiento dentro de movimiento For exterior dentro de movimiento dentro de movimiento dentro de movimiento dentro de movimiento For exterior dentro de movimiento dentro de movimiento dentro de movimiento dentro de movimiento etc Saludos, -- Javier Pérez http://es.linkedin.com/in/javierperez1 http://www.perasalvino.es/ From alexis.roda.villalonga en gmail.com Sat Jul 11 08:12:26 2020 From: alexis.roda.villalonga en gmail.com (Alexis Roda) Date: Sat, 11 Jul 2020 14:12:26 +0200 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> Message-ID: Hola, El problema es que has agotado los elementos y el reader no tiene nada que devolver. A efectos prácticos a partir de la segunda vez que ejecutas el bucle interno no realiza ninguna iteración. Puedes consultar la documentación del módulo csv para ver si el reader te permite "rebobinar" y así empezar a leer nuevamente desde el principio. Otras solución, no muy eficiente, sería mover la creación del reader dentro del bucle: fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) print("Leyendo fondo: ") for fondo in fondos_csv: movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') for movimiento in movimientos_csv: print("dentro de movimiento") print("For exterior") de esta forma en cada iteración del bucle externo se crea un nuevo reader, posicionado al principio. Sin conocer exactamente lo que haces no sé si es factible pero personalmente intentaría hacer algo como esto: movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') movimientos_dict = {} for mov in movimientos_csv: if mov.codigo_fondo not in movimientos_dict: movimientos_dict[mov.codigo_fondo] = [] movimientos_dict[mov.codigo_fondo].append(mov) fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) for fondo in fondos_csv: for mov in movivientos_dict.get(i.codigo, ()): procesar(fondo, mov) Precarga los movimientos y los clasifica por fondo. Solo recorres la lista de movimientos una vez (dos en realidad) en lugar de recorrerla entera para cada fondo. Carga los movimientos en memoria, puede ser problemático si tienes muchos. Espero que te sirva. Saludos Missatge de Javier Perez del dia ds., 11 de jul. 2020 a les 13:31: > Hola a todos, buenos días, > > > Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de > entender donde esta el problema. > > > Tengo dos CSV que los importo y hasta ese punto sin problemas. > > Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada > línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. > Si coinciden en el código del isbn empieza a hacer una serie de cálculos. > > Bien, pues solo me recorre una vez ?movimientos?, la primera. > > Os pongo los trozos de código: > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > for movimiento in movimientos_csv: > print("dentro de movimiento") > > print("For exterior") > > > > > > Y esto sale por el terminal: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > > Y entiendo que tenia que salir: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > etc > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From alejandroacostaalamo en gmail.com Sat Jul 11 14:53:34 2020 From: alejandroacostaalamo en gmail.com (Alejandro Acosta) Date: Sat, 11 Jul 2020 14:53:34 -0400 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> Message-ID: <9120ef55-d8d8-35d5-39ce-11ee323d10c4@gmail.com> Creo que otra solución puede ser llevar el segundo for a una función aparte On 7/11/20 6:37 AM, Javier Perez wrote: > Hola a todos, buenos días, > > > Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de entender donde esta el problema. > > > Tengo dos CSV que los importo y hasta ese punto sin problemas. > > Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. Si coinciden en el código del isbn empieza a hacer una serie de cálculos. > > Bien, pues solo me recorre una vez ?movimientos?, la primera. > > Os pongo los trozos de código: > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > for movimiento in movimientos_csv: > print("dentro de movimiento") > > print("For exterior") > > > > > > Y esto sale por el terminal: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > > Y entiendo que tenia que salir: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > etc > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From ricardo.cardenes en gmail.com Sat Jul 11 17:44:33 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Sat, 11 Jul 2020 11:44:33 -1000 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> Message-ID: > > Puedes consultar la documentación del módulo csv para ver si el reader te > permite "rebobinar" y así empezar a leer nuevamente desde el principio. No, los objetos _csv.reader son iteradores puros y duros. Pero iteran sobre un objeto de tipo fichero, así que hay un truco... with open('movimientos.csv') as mov_file: fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) print("Leyendo fondo: ") for fondo in fondos_csv: # Volvemos al inicio mov_file.seek(0) for movimiento in csv.reader(mov_file, delimiter=';'): print("dentro de movimiento") print("For exterior") En realidad no hay necesidad de recrear el "reader" para los movimientos cada vez. Un simple "seek(0)" del fichero basta y funciona bien. Pero queda más limpio. Aunque para ser sinceros, si el fichero de movimientos no es muy grande, simplemente cargaría todas las líneas en memoria y me ahorraría tener que leerlas cada vez desde disco. Saludos, Ricardo On Sat, Jul 11, 2020 at 2:13 AM Alexis Roda < alexis.roda.villalonga en gmail.com> wrote: > Hola, > > El problema es que has agotado los elementos y el reader no tiene nada que > devolver. A efectos prácticos a partir de la segunda vez que ejecutas el > bucle interno no realiza ninguna iteración. > > Puedes consultar la documentación del módulo csv para ver si el reader te > permite "rebobinar" y así empezar a leer nuevamente desde el principio. > > Otras solución, no muy eficiente, sería mover la creación del reader > dentro del bucle: > > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > for movimiento in movimientos_csv: > print("dentro de movimiento") > > print("For exterior") > > > de esta forma en cada iteración del bucle externo se crea un nuevo reader, > posicionado al principio. > > Sin conocer exactamente lo que haces no sé si es factible pero > personalmente intentaría hacer algo como esto: > > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > > movimientos_dict = {} > for mov in movimientos_csv: > if mov.codigo_fondo not in movimientos_dict: > movimientos_dict[mov.codigo_fondo] = [] > movimientos_dict[mov.codigo_fondo].append(mov) > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > for fondo in fondos_csv: > > for mov in movivientos_dict.get(i.codigo, ()): > > procesar(fondo, mov) > > > Precarga los movimientos y los clasifica por fondo. Solo recorres la lista > de movimientos una vez (dos en realidad) en lugar de recorrerla entera para > cada fondo. Carga los movimientos en memoria, puede ser problemático si > tienes muchos. > > > Espero que te sirva. > > Saludos > > Missatge de Javier Perez del dia ds., 11 de > jul. 2020 a les 13:31: > >> Hola a todos, buenos días, >> >> >> Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de >> entender donde esta el problema. >> >> >> Tengo dos CSV que los importo y hasta ese punto sin problemas. >> >> Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada >> línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. >> Si coinciden en el código del isbn empieza a hacer una serie de cálculos. >> >> Bien, pues solo me recorre una vez ?movimientos?, la primera. >> >> Os pongo los trozos de código: >> movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') >> >> fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) >> >> print("Leyendo fondo: ") >> for fondo in fondos_csv: >> for movimiento in movimientos_csv: >> print("dentro de movimiento") >> >> print("For exterior") >> >> >> >> >> >> Y esto sale por el terminal: >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> For exterior >> >> Y entiendo que tenia que salir: >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> For exterior >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> For exterior >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> For exterior >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> dentro de movimiento >> etc >> >> >> >> Saludos, >> >> -- >> Javier Pérez >> http://es.linkedin.com/in/javierperez1 >> http://www.perasalvino.es/ >> >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From javierperez en perasalvino.es Sun Jul 12 06:43:38 2020 From: javierperez en perasalvino.es (Javier Perez) Date: Sun, 12 Jul 2020 12:43:38 +0200 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> Message-ID: <8E4B7539-3180-4AA8-B04F-A936708DC437@perasalvino.es> Muchas gracias a los tres. Ayer se me complico el día y hasta ahora no lo he podio probar. Alejandro lo de sacarlo a una función no funciono. Alexis, si, podía ser. Veo un poco más limpia la de Ricardo. Ricardo, funciona perfectamente. Pero cuando dices: > Aunque para ser sinceros, si el fichero de movimientos no es muy grande, simplemente cargaría todas las líneas en memoria y me ahorraría tener que leerlas cada vez desde disco. 1º: ¿como las cargo en memória? No encuentro documentación. 2º ahora es una mierdecilla de uno 120 registros. Pero con el paso del tiempo, cuando sea rico, a lo mejor son varios miles :-)) ojalá. ¿a partir de que punto crees que merece la pena el cambio entre memoria/disco? Supongo que dependerá del equipo donde corra la app. Como se trata de aprender voy a ver si soy capaz de implementar las dos opciones y ver el tiempo que tarda en cada una. Lo dicho, muchísimas gracias a los tres. Y feliz verano a todos. Saludos, -- Javier Pérez http://es.linkedin.com/in/javierperez1 http://www.perasalvino.es/ > El 11 jul 2020, a las 23:44, Ricardo Cárdenes escribió: > > Puedes consultar la documentación del módulo csv para ver si el reader te permite "rebobinar" y así empezar a leer nuevamente desde el principio. > > No, los objetos _csv.reader son iteradores puros y duros. > > Pero iteran sobre un objeto de tipo fichero, así que hay un truco... > > with open('movimientos.csv') as mov_file: > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > # Volvemos al inicio > mov_file.seek(0) > for movimiento in csv.reader(mov_file, delimiter=';'): > print("dentro de movimiento") > > print("For exterior") > > En realidad no hay necesidad de recrear el "reader" para los movimientos cada vez. Un simple "seek(0)" del fichero basta y funciona bien. Pero queda más limpio. > > Aunque para ser sinceros, si el fichero de movimientos no es muy grande, simplemente cargaría todas las líneas en memoria y me ahorraría tener que leerlas cada vez desde disco. > > Saludos, > Ricardo > > On Sat, Jul 11, 2020 at 2:13 AM Alexis Roda > wrote: > Hola, > > El problema es que has agotado los elementos y el reader no tiene nada que devolver. A efectos prácticos a partir de la segunda vez que ejecutas el bucle interno no realiza ninguna iteración. > > Puedes consultar la documentación del módulo csv para ver si el reader te permite "rebobinar" y así empezar a leer nuevamente desde el principio. > > Otras solución, no muy eficiente, sería mover la creación del reader dentro del bucle: > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > for movimiento in movimientos_csv: > print("dentro de movimiento") > > print("For exterior") > > de esta forma en cada iteración del bucle externo se crea un nuevo reader, posicionado al principio. > > Sin conocer exactamente lo que haces no sé si es factible pero personalmente intentaría hacer algo como esto: > > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > movimientos_dict = {} > for mov in movimientos_csv: > if mov.codigo_fondo not in movimientos_dict: > movimientos_dict[mov.codigo_fondo] = [] > movimientos_dict[mov.codigo_fondo].append(mov) > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > for fondo in fondos_csv: > for mov in movivientos_dict.get(i.codigo, ()): > procesar(fondo, mov) > > Precarga los movimientos y los clasifica por fondo. Solo recorres la lista de movimientos una vez (dos en realidad) en lugar de recorrerla entera para cada fondo. Carga los movimientos en memoria, puede ser problemático si tienes muchos. > > > Espero que te sirva. > > Saludos > > Missatge de Javier Perez > del dia ds., 11 de jul. 2020 a les 13:31: > Hola a todos, buenos días, > > > Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de entender donde esta el problema. > > > Tengo dos CSV que los importo y hasta ese punto sin problemas. > > Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. Si coinciden en el código del isbn empieza a hacer una serie de cálculos. > > Bien, pues solo me recorre una vez ?movimientos?, la primera. > > Os pongo los trozos de código: > movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') > > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > for movimiento in movimientos_csv: > print("dentro de movimiento") > > print("For exterior") > > > > > > Y esto sale por el terminal: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > For exterior > > Y entiendo que tenia que salir: > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > For exterior > dentro de movimiento > dentro de movimiento > dentro de movimiento > dentro de movimiento > etc > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ricardo.cardenes en gmail.com Sun Jul 12 06:56:34 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Sun, 12 Jul 2020 00:56:34 -1000 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: <8E4B7539-3180-4AA8-B04F-A936708DC437@perasalvino.es> References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> <8E4B7539-3180-4AA8-B04F-A936708DC437@perasalvino.es> Message-ID: > > Alexis, si, podía ser. Veo un poco más limpia la de Ricardo. Ojo, más limpio aún sería algo del tipo... with open('fondos.csv') as fondos_file: fondos_csv = csv.reader(fondos_file, delimiter=';?) print("Leyendo fondo: ") with open('movimientos.csv') as mov_file: for fondo in fondos_csv: with open('movimientos.csv') as mov_file: for movimiento in csv.reader(mov_file, delimiter=';'): print("dentro de movimiento") print("For exterior") Es decir, nada de reutilizar el fichero. Claro que eso depende de muchas cosas. Por ejemplo, de la cantidad de fondos y del coste de abrir el fichero de nuevo. Pero eso son preocupaciones excesivas, optimización prematura. En cualquier caso: 1º: ¿como las cargo en memória? No encuentro documentación. Tan simple como: movimientos = list(csv.reader(open('movimientos.csv', delimiter=';'))) # ... for movimiento in movimientos: # ... Puedes complicar un poco más la lectura inicial, claro, por ejemplo convirtiendo cada fila del CSV a una `namedtuple` o `dataclass` con los valores ya limpios y convertidos a su tipo correspondiente (si fuera necesario), que además es una optimización interesante porque es algo que harás una sola vez en lugar de "n" (siendo "n" el número de fondos). 2º ahora es una mierdecilla de uno 120 registros. Pero con el paso del > tiempo, cuando sea rico, a lo mejor son varios miles :-)) ojalá. ¿a partir > de que punto crees que merece la pena el cambio entre memoria/disco? > Supongo que dependerá del equipo donde corra la app Depende todo de la memoria que tengas :-) Mientras quepa la lista/tupla/loquesea... Saludos, Ricardo On Sun, Jul 12, 2020 at 12:44 AM Javier Perez wrote: > Muchas gracias a los tres. Ayer se me complico el día y hasta ahora no lo > he podio probar. > > Alejandro lo de sacarlo a una función no funciono. > > Alexis, si, podía ser. Veo un poco más limpia la de Ricardo. > > Ricardo, funciona perfectamente. > > Pero cuando dices: > > Aunque para ser sinceros, si el fichero de movimientos no es muy grande, > simplemente cargaría todas las líneas en memoria y me ahorraría tener que > leerlas cada vez desde disco. > > > 1º: ¿como las cargo en memória? No encuentro documentación. > > 2º ahora es una mierdecilla de uno 120 registros. Pero con el paso del > tiempo, cuando sea rico, a lo mejor son varios miles :-)) ojalá. ¿a partir > de que punto crees que merece la pena el cambio entre memoria/disco? > Supongo que dependerá del equipo donde corra la app. > > Como se trata de aprender voy a ver si soy capaz de implementar las dos > opciones y ver el tiempo que tarda en cada una. > > > > Lo dicho, muchísimas gracias a los tres. Y feliz verano a todos. > > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > El 11 jul 2020, a las 23:44, Ricardo Cárdenes > escribió: > > Puedes consultar la documentación del módulo csv para ver si el reader te >> permite "rebobinar" y así empezar a leer nuevamente desde el principio. > > > No, los objetos _csv.reader son iteradores puros y duros. > > Pero iteran sobre un objeto de tipo fichero, así que hay un truco... > > with open('movimientos.csv') as mov_file: > fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > # Volvemos al inicio > mov_file.seek(0) > for movimiento in csv.reader(mov_file, delimiter=';'): > print("dentro de movimiento") > > print("For exterior") > > En realidad no hay necesidad de recrear el "reader" para los movimientos > cada vez. Un simple "seek(0)" del fichero basta y funciona bien. Pero queda > más limpio. > > Aunque para ser sinceros, si el fichero de movimientos no es muy grande, > simplemente cargaría todas las líneas en memoria y me ahorraría tener que > leerlas cada vez desde disco. > > Saludos, > Ricardo > > On Sat, Jul 11, 2020 at 2:13 AM Alexis Roda < > alexis.roda.villalonga en gmail.com> wrote: > >> Hola, >> >> El problema es que has agotado los elementos y el reader no tiene nada >> que devolver. A efectos prácticos a partir de la segunda vez que ejecutas >> el bucle interno no realiza ninguna iteración. >> >> Puedes consultar la documentación del módulo csv para ver si el reader te >> permite "rebobinar" y así empezar a leer nuevamente desde el principio. >> >> Otras solución, no muy eficiente, sería mover la creación del reader >> dentro del bucle: >> >> >> fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) >> >> print("Leyendo fondo: ") >> for fondo in fondos_csv: >> movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') >> for movimiento in movimientos_csv: >> print("dentro de movimiento") >> >> print("For exterior") >> >> >> de esta forma en cada iteración del bucle externo se crea un nuevo >> reader, posicionado al principio. >> >> Sin conocer exactamente lo que haces no sé si es factible pero >> personalmente intentaría hacer algo como esto: >> >> movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') >> >> movimientos_dict = {} >> for mov in movimientos_csv: >> if mov.codigo_fondo not in movimientos_dict: >> movimientos_dict[mov.codigo_fondo] = [] >> movimientos_dict[mov.codigo_fondo].append(mov) >> >> fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) >> for fondo in fondos_csv: >> >> for mov in movivientos_dict.get(i.codigo, ()): >> >> procesar(fondo, mov) >> >> >> Precarga los movimientos y los clasifica por fondo. Solo recorres la >> lista de movimientos una vez (dos en realidad) en lugar de recorrerla >> entera para cada fondo. Carga los movimientos en memoria, puede ser >> problemático si tienes muchos. >> >> >> Espero que te sirva. >> >> Saludos >> >> Missatge de Javier Perez del dia ds., 11 de >> jul. 2020 a les 13:31: >> >>> Hola a todos, buenos días, >>> >>> >>> Necesito vuestra ayuda. Llevo una horas y no soy capaz de seguir ni de >>> entender donde esta el problema. >>> >>> >>> Tengo dos CSV que los importo y hasta ese punto sin problemas. >>> >>> Después quiero recorrer uno (?fondos? en mi app). Y para cada linea cada >>> línea de ?fondos? tiene que recorrer el otro CSV que llamo ?movimientos?. >>> Si coinciden en el código del isbn empieza a hacer una serie de cálculos. >>> >>> Bien, pues solo me recorre una vez ?movimientos?, la primera. >>> >>> Os pongo los trozos de código: >>> movimientos_csv = csv.reader(open('movimientos.csv'), delimiter=';') >>> >>> fondos_csv = csv.reader(open('fondos.csv'), delimiter=';?) >>> >>> print("Leyendo fondo: ") >>> for fondo in fondos_csv: >>> for movimiento in movimientos_csv: >>> print("dentro de movimiento") >>> >>> print("For exterior") >>> >>> >>> >>> >>> >>> Y esto sale por el terminal: >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> For exterior >>> >>> Y entiendo que tenia que salir: >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> For exterior >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> For exterior >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> For exterior >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> dentro de movimiento >>> etc >>> >>> >>> >>> Saludos, >>> >>> -- >>> Javier Pérez >>> http://es.linkedin.com/in/javierperez1 >>> http://www.perasalvino.es/ >>> >>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ricardo.cardenes en gmail.com Mon Jul 13 00:50:08 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Sun, 12 Jul 2020 18:50:08 -1000 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> <8E4B7539-3180-4AA8-B04F-A936708DC437@perasalvino.es> Message-ID: Ups, el código quedó un poco "tal que así". Versión correcta: with open('fondos.csv') as fondos_file: > fondos_csv = csv.reader(fondos_file, delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > with open('movimientos.csv') as mov_file: > for movimiento in csv.reader(mov_file, delimiter=';'): > print("dentro de movimiento") > > print("For exterior") > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From javierperez en perasalvino.es Mon Jul 13 04:28:02 2020 From: javierperez en perasalvino.es (Javier Perez) Date: Mon, 13 Jul 2020 10:28:02 +0200 Subject: [Python-es] Problemas a la hora de recorrer un CVS In-Reply-To: References: <3AD474D1-991E-4454-84CC-9301DFD5CDF6@perasalvino.es> <8E4B7539-3180-4AA8-B04F-A936708DC437@perasalvino.es> Message-ID: <0381B605-3951-4136-8E76-59407B3F6F1E@perasalvino.es> Muchas gracias, lo mira ahora. Saludos, -- Javier Pérez http://es.linkedin.com/in/javierperez1 http://www.perasalvino.es/ > El 13 jul 2020, a las 6:50, Ricardo Cárdenes escribió: > > Ups, el código quedó un poco "tal que así". Versión correcta: > > with open('fondos.csv') as fondos_file: > fondos_csv = csv.reader(fondos_file, delimiter=';?) > > print("Leyendo fondo: ") > for fondo in fondos_csv: > with open('movimientos.csv') as mov_file: > for movimiento in csv.reader(mov_file, delimiter=';'): > print("dentro de movimiento") > > print("For exterior") > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Tue Jul 14 09:40:18 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Tue, 14 Jul 2020 10:40:18 -0300 Subject: [Python-es] [Consulta] pass y none Message-ID: Hola, perdón la pregunta tonta pero quiero saber cuál es la diferencia entre poner por ejemplo: class name(): none Y: class name(): pass Hay alguna diferencia realmente sustancial que me diga: en este caso usás pass y en otro caso none? Gracias, saludos ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ciberseba en gmail.com Tue Jul 14 10:55:16 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Tue, 14 Jul 2020 10:55:16 -0400 Subject: [Python-es] [Consulta] pass y none In-Reply-To: References: Message-ID: Hola, En términos prácticos, ambas son lo mismo. En términos más puristas, el pass es una declaración y el None es una expresión. ¿Qué quiere decir esto? El pass es una declaración vacía (similar a poner una función o método vacío en otros lenguajes, solo que en Python al ser indentado, si o si debes poner algo. El pass cumple la función equivalente). El None es una expresión que es evaluada, vale decir, toma un valor (en este caso None), solo que no lo estás asignando. Es equivalente a poner cualquier entero, string, etc, solo que el None equivale a un valor nulo. Saludos. On Tue, Jul 14, 2020 at 9:40 AM Lemarchand Barker wrote: > Hola, perdón la pregunta tonta pero quiero saber cuál es la diferencia > entre poner por ejemplo: > class name(): > none > Y: > class name(): > pass > Hay alguna diferencia realmente sustancial que me diga: en este caso usás > pass y en otro caso none? > Gracias, saludos > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Tue Jul 14 12:39:10 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Tue, 14 Jul 2020 13:39:10 -0300 Subject: [Python-es] [Consulta] pass y none In-Reply-To: Message-ID: <5f0ddfb3.1c69fb81.dc7dc.62db@mx.google.com> Más claro imposible. Muchísimas gracias SebastiánEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Sebastián Arancibia Fecha: 14/7/20 11:56 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] pass y none Hola,En términos prácticos, ambas son lo mismo.En términos más puristas, el pass es una declaración y el None es una expresión. ¿Qué quiere decir esto? El pass es una declaración vacía (similar a poner una función o método vacío en otros lenguajes, solo que en Python al ser indentado, si o si debes poner algo. El pass cumple la función equivalente). El None es una expresión que es evaluada, vale decir, toma un valor (en este caso None), solo que no lo estás asignando. Es equivalente a poner cualquier entero, string, etc, solo que el None equivale a un valor nulo.Saludos.On Tue, Jul 14, 2020 at 9:40 AM Lemarchand Barker wrote:Hola, perdón la pregunta tonta pero quiero saber cuál es la diferencia entre poner por ejemplo:class name():    noneY:class name():    passHay alguna diferencia realmente sustancial que me diga: en este caso usás pass y en otro caso none?Gracias, saludos _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 15 16:27:19 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Wed, 15 Jul 2020 17:27:19 -0300 Subject: [Python-es] [Consulta] max() y min() Message-ID: Hola, vengo con otra pregunta tonta. Estaba jugando con for, la típica de buscar máximos y mínimos, les dejo el código: lista = [] cadena = "Esto es una cadena que contiene varias letras y muchas palabras" vocales = ['a', 'e', 'i', 'o', 'u'] for x in cadena: if x == 'a': va = va + 1 elif x == 'e': ve = ve + 1 elif x == 'i': vi = vi + 1 elif x == 'o': vo = vo + 1 elif x == 'u': vu = vu + 1 lista.append(va) lista.append(ve) lista.append(vi) lista.append(vo) lista.append(vu) total = va + ve + vi + vo + vu max_item = max(lista, key=int) min_item = min(lista, key=int) print(f"Mayor: {max_item}") print(f"Menor: {min_item}") Bueno mi consulta es la siguiente, está bien que haya utilizado max y min para tratar de buscar cuál es la vocal que más se repite y menos se repite? Pero el tema es el siguiente hay 2 vocales que se repiten solamente 2 veces, que son: i y o. Asumo que por el orden de los elementos en la lista el 2 que muestra se corresponde a la i. Bueno eso es todo, consultar si está bien utilizado el max y el min, saludos y gracias. From jjgomera en gmail.com Wed Jul 15 17:02:32 2020 From: jjgomera en gmail.com (=?UTF-8?B?SnVhbiBKb3PDqSBHw7NtZXogUm9tZXJh?=) Date: Wed, 15 Jul 2020 23:02:32 +0200 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: Message-ID: Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: va = cadena.count('a') ... Perdón por ser tan parco con el código, estoy desde móvil. El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: > Hola, vengo con otra pregunta tonta. > Estaba jugando con for, la típica de buscar máximos y mínimos, les > dejo el código: > > lista = [] > > cadena = "Esto es una cadena que contiene varias letras y muchas palabras" > > vocales = ['a', 'e', 'i', 'o', 'u'] > > for x in cadena: > if x == 'a': > va = va + 1 > elif x == 'e': > ve = ve + 1 > elif x == 'i': > vi = vi + 1 > elif x == 'o': > vo = vo + 1 > elif x == 'u': > vu = vu + 1 > > lista.append(va) > lista.append(ve) > lista.append(vi) > lista.append(vo) > lista.append(vu) > > total = va + ve + vi + vo + vu > > max_item = max(lista, key=int) > min_item = min(lista, key=int) > print(f"Mayor: {max_item}") > print(f"Menor: {min_item}") > > Bueno mi consulta es la siguiente, está bien que haya utilizado max y > min para tratar de buscar cuál es la vocal que más se repite y menos > se repite? Pero el tema es el siguiente hay 2 vocales que se repiten > solamente 2 veces, que son: i y o. Asumo que por el orden de los > elementos en la lista el 2 que muestra se corresponde a la i. > Bueno eso es todo, consultar si está bien utilizado el max y el min, > saludos y gracias. > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 15 17:07:41 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Wed, 15 Jul 2020 18:07:41 -0300 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: Message-ID: Lo voy a buscar y voy a ver. Muchas gracias El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera () escribió: > > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: > > va = cadena.count('a') > ... > > Perdón por ser tan parco con el código, estoy desde móvil. > > > > > El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: >> >> Hola, vengo con otra pregunta tonta. >> Estaba jugando con for, la típica de buscar máximos y mínimos, les >> dejo el código: >> >> lista = [] >> >> cadena = "Esto es una cadena que contiene varias letras y muchas palabras" >> >> vocales = ['a', 'e', 'i', 'o', 'u'] >> >> for x in cadena: >> if x == 'a': >> va = va + 1 >> elif x == 'e': >> ve = ve + 1 >> elif x == 'i': >> vi = vi + 1 >> elif x == 'o': >> vo = vo + 1 >> elif x == 'u': >> vu = vu + 1 >> >> lista.append(va) >> lista.append(ve) >> lista.append(vi) >> lista.append(vo) >> lista.append(vu) >> >> total = va + ve + vi + vo + vu >> >> max_item = max(lista, key=int) >> min_item = min(lista, key=int) >> print(f"Mayor: {max_item}") >> print(f"Menor: {min_item}") >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y >> min para tratar de buscar cuál es la vocal que más se repite y menos >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten >> solamente 2 veces, que son: i y o. Asumo que por el orden de los >> elementos en la lista el 2 que muestra se corresponde a la i. >> Bueno eso es todo, consultar si está bien utilizado el max y el min, >> saludos y gracias. >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From ricardo.cardenes en gmail.com Wed Jul 15 20:09:16 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Wed, 15 Jul 2020 14:09:16 -1000 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: Message-ID: Te voy a dar una mejor: >>> from collections import Counter >>> cuentas = Counter(cadena.lower()) >>> va = cuentas.get('a', 0) >>> ve = cuentas.get('e', 0) >>> va 10 >>> ve 7 Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario. Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites. On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker wrote: > Lo voy a buscar y voy a ver. > Muchas gracias > > El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera > () escribió: > > > > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria > código usando count: > > > > va = cadena.count('a') > > ... > > > > Perdón por ser tan parco con el código, estoy desde móvil. > > > > > > > > > > El mié., 15 jul. 2020 22:28, Lemarchand Barker > escribió: > >> > >> Hola, vengo con otra pregunta tonta. > >> Estaba jugando con for, la típica de buscar máximos y mínimos, les > >> dejo el código: > >> > >> lista = [] > >> > >> cadena = "Esto es una cadena que contiene varias letras y muchas > palabras" > >> > >> vocales = ['a', 'e', 'i', 'o', 'u'] > >> > >> for x in cadena: > >> if x == 'a': > >> va = va + 1 > >> elif x == 'e': > >> ve = ve + 1 > >> elif x == 'i': > >> vi = vi + 1 > >> elif x == 'o': > >> vo = vo + 1 > >> elif x == 'u': > >> vu = vu + 1 > >> > >> lista.append(va) > >> lista.append(ve) > >> lista.append(vi) > >> lista.append(vo) > >> lista.append(vu) > >> > >> total = va + ve + vi + vo + vu > >> > >> max_item = max(lista, key=int) > >> min_item = min(lista, key=int) > >> print(f"Mayor: {max_item}") > >> print(f"Menor: {min_item}") > >> > >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y > >> min para tratar de buscar cuál es la vocal que más se repite y menos > >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten > >> solamente 2 veces, que son: i y o. Asumo que por el orden de los > >> elementos en la lista el 2 que muestra se corresponde a la i. > >> Bueno eso es todo, consultar si está bien utilizado el max y el min, > >> saludos y gracias. > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 15 20:49:18 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Wed, 15 Jul 2020 21:49:18 -0300 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: Message-ID: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> Mañana lo reviso también, muchas graciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 15/7/20 21:10 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] max() y min() Te voy a dar una mejor:>>> from collections import Counter>>> cuentas = Counter(cadena.lower())>>> va = cuentas.get('a', 0)>>> ve = cuentas.get('e', 0)>>> va10>>> ve7Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario.Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites.On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker wrote:Lo voy a buscar y voy a ver. Muchas gracias El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera () escribió: > > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: > > va = cadena.count('a') > ... > > Perdón por ser tan parco con el código, estoy desde móvil. > > > > > El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: >> >> Hola, vengo con otra pregunta tonta. >> Estaba jugando con for, la típica de buscar máximos y mínimos, les >> dejo el código: >> >> lista = [] >> >> cadena = "Esto es una cadena que contiene varias letras y muchas palabras" >> >> vocales = ['a', 'e', 'i', 'o', 'u'] >> >> for x in cadena: >>     if x == 'a': >>         va = va + 1 >>     elif x == 'e': >>         ve = ve + 1 >>     elif x == 'i': >>         vi = vi + 1 >>     elif x == 'o': >>         vo = vo + 1 >>     elif x == 'u': >>         vu = vu + 1 >> >> lista.append(va) >> lista.append(ve) >> lista.append(vi) >> lista.append(vo) >> lista.append(vu) >> >> total = va + ve + vi + vo + vu >> >> max_item = max(lista, key=int) >> min_item = min(lista, key=int) >> print(f"Mayor: {max_item}") >> print(f"Menor: {min_item}") >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y >> min para tratar de buscar cuál es la vocal que más se repite y menos >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten >> solamente 2 veces, que son: i y o. Asumo que por el orden de los >> elementos en la lista el 2 que muestra se corresponde a la i. >> Bueno eso es todo, consultar si está bien utilizado el max y el min, >> saludos y gracias. >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 16 10:53:10 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Thu, 16 Jul 2020 11:53:10 -0300 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> References: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> Message-ID: Buenas, estoy viendo las opciones que me dieron con count(). Ahora viene mi pregunta, cuál sería la diferencia entre lo que me recomendó: Juan José: va = cadena.count('a') Y lo que dijo: Ricardo: >>> from collections import Counter >>> cuentas = Counter(cadena.lower()) >>> va = cuentas.get('a', 0) >>> ve = cuentas.get('e', 0) >>> va 10 >>> ve 7 Gracias, saludos El mié., 15 jul. 2020 a las 21:49, lemarchand8679 () escribió: > > Mañana lo reviso también, muchas gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 15/7/20 21:10 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] max() y min() > > Te voy a dar una mejor: > > >>> from collections import Counter > >>> cuentas = Counter(cadena.lower()) > >>> va = cuentas.get('a', 0) > >>> ve = cuentas.get('e', 0) > >>> va > 10 > >>> ve > 7 > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario. > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites. > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker wrote: >> >> Lo voy a buscar y voy a ver. >> Muchas gracias >> >> El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera >> () escribió: >> > >> > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: >> > >> > va = cadena.count('a') >> > ... >> > >> > Perdón por ser tan parco con el código, estoy desde móvil. >> > >> > >> > >> > >> > El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: >> >> >> >> Hola, vengo con otra pregunta tonta. >> >> Estaba jugando con for, la típica de buscar máximos y mínimos, les >> >> dejo el código: >> >> >> >> lista = [] >> >> >> >> cadena = "Esto es una cadena que contiene varias letras y muchas palabras" >> >> >> >> vocales = ['a', 'e', 'i', 'o', 'u'] >> >> >> >> for x in cadena: >> >> if x == 'a': >> >> va = va + 1 >> >> elif x == 'e': >> >> ve = ve + 1 >> >> elif x == 'i': >> >> vi = vi + 1 >> >> elif x == 'o': >> >> vo = vo + 1 >> >> elif x == 'u': >> >> vu = vu + 1 >> >> >> >> lista.append(va) >> >> lista.append(ve) >> >> lista.append(vi) >> >> lista.append(vo) >> >> lista.append(vu) >> >> >> >> total = va + ve + vi + vo + vu >> >> >> >> max_item = max(lista, key=int) >> >> min_item = min(lista, key=int) >> >> print(f"Mayor: {max_item}") >> >> print(f"Menor: {min_item}") >> >> >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y >> >> min para tratar de buscar cuál es la vocal que más se repite y menos >> >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten >> >> solamente 2 veces, que son: i y o. Asumo que por el orden de los >> >> elementos en la lista el 2 que muestra se corresponde a la i. >> >> Bueno eso es todo, consultar si está bien utilizado el max y el min, >> >> saludos y gracias. >> >> _______________________________________________ >> >> Python-es mailing list >> >> Python-es en python.org >> >> https://mail.python.org/mailman/listinfo/python-es >> > >> > _______________________________________________ >> > Python-es mailing list >> > Python-es en python.org >> > https://mail.python.org/mailman/listinfo/python-es >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es From ciberseba en gmail.com Thu Jul 16 14:17:24 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Thu, 16 Jul 2020 14:17:24 -0400 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> Message-ID: El ejemplo de Juan José usa un método de la clase string ( https://www.w3schools.com/python/python_ref_string.asp ) mientras que el de Ricardo importa la clase Counter del módulo collections. Si no me equivoco, la clase Counter te permite contar cualquier tipo de objeto, a diferencia del count() de la clase string que solo te cuenta un determinado caracter o string dentro de una cadena. Esa es la diferencia. On Thu, Jul 16, 2020 at 10:53 AM Lemarchand Barker wrote: > Buenas, estoy viendo las opciones que me dieron con count(). > Ahora viene mi pregunta, cuál sería la diferencia entre lo que me > recomendó: > Juan José: > va = cadena.count('a') > > Y lo que dijo: > Ricardo: > > >>> from collections import Counter > >>> cuentas = Counter(cadena.lower()) > >>> va = cuentas.get('a', 0) > >>> ve = cuentas.get('e', 0) > >>> va > 10 > >>> ve > 7 > > Gracias, saludos > > El mié., 15 jul. 2020 a las 21:49, lemarchand8679 > () escribió: > > > > Mañana lo reviso también, muchas gracias > > > > > > > > Enviado desde mi smartphone Samsung Galaxy. > > > > > > -------- Mensaje original -------- > > De: Ricardo Cárdenes > > Fecha: 15/7/20 21:10 (GMT-03:00) > > A: La lista de python en castellano > > Asunto: Re: [Python-es] [Consulta] max() y min() > > > > Te voy a dar una mejor: > > > > >>> from collections import Counter > > >>> cuentas = Counter(cadena.lower()) > > >>> va = cuentas.get('a', 0) > > >>> ve = cuentas.get('e', 0) > > >>> va > > 10 > > >>> ve > > 7 > > > > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma > interfaz que un diccionario. > > > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas > las vocales, no sólo las minúsculas. Adáptalo según necesites. > > > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >> > >> Lo voy a buscar y voy a ver. > >> Muchas gracias > >> > >> El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera > >> () escribió: > >> > > >> > Hola, como uso te hace la función q necesitas, yo sin embargo > recortaria código usando count: > >> > > >> > va = cadena.count('a') > >> > ... > >> > > >> > Perdón por ser tan parco con el código, estoy desde móvil. > >> > > >> > > >> > > >> > > >> > El mié., 15 jul. 2020 22:28, Lemarchand Barker < > lemarchand8679 en gmail.com> escribió: > >> >> > >> >> Hola, vengo con otra pregunta tonta. > >> >> Estaba jugando con for, la típica de buscar máximos y mínimos, les > >> >> dejo el código: > >> >> > >> >> lista = [] > >> >> > >> >> cadena = "Esto es una cadena que contiene varias letras y muchas > palabras" > >> >> > >> >> vocales = ['a', 'e', 'i', 'o', 'u'] > >> >> > >> >> for x in cadena: > >> >> if x == 'a': > >> >> va = va + 1 > >> >> elif x == 'e': > >> >> ve = ve + 1 > >> >> elif x == 'i': > >> >> vi = vi + 1 > >> >> elif x == 'o': > >> >> vo = vo + 1 > >> >> elif x == 'u': > >> >> vu = vu + 1 > >> >> > >> >> lista.append(va) > >> >> lista.append(ve) > >> >> lista.append(vi) > >> >> lista.append(vo) > >> >> lista.append(vu) > >> >> > >> >> total = va + ve + vi + vo + vu > >> >> > >> >> max_item = max(lista, key=int) > >> >> min_item = min(lista, key=int) > >> >> print(f"Mayor: {max_item}") > >> >> print(f"Menor: {min_item}") > >> >> > >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y > >> >> min para tratar de buscar cuál es la vocal que más se repite y menos > >> >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten > >> >> solamente 2 veces, que son: i y o. Asumo que por el orden de los > >> >> elementos en la lista el 2 que muestra se corresponde a la i. > >> >> Bueno eso es todo, consultar si está bien utilizado el max y el min, > >> >> saludos y gracias. > >> >> _______________________________________________ > >> >> Python-es mailing list > >> >> Python-es en python.org > >> >> https://mail.python.org/mailman/listinfo/python-es > >> > > >> > _______________________________________________ > >> > Python-es mailing list > >> > Python-es en python.org > >> > https://mail.python.org/mailman/listinfo/python-es > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Thu Jul 16 14:48:54 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Thu, 16 Jul 2020 15:48:54 -0300 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: Message-ID: <5f10a11b.1c69fb81.183c7.cc8c@mx.google.com> Muchas gracias Sebastián. Tomo notaEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Sebastián Arancibia Fecha: 16/7/20 15:18 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] max() y min() El ejemplo de Juan José usa un método de la clase string ( https://www.w3schools.com/python/python_ref_string.asp  ) mientras que el de Ricardo importa la clase Counter del módulo collections. Si no me equivoco, la clase Counter te permite contar cualquier tipo de objeto, a diferencia del count() de la clase string que solo te cuenta un determinado caracter o string dentro de una cadena. Esa es la diferencia.On Thu, Jul 16, 2020 at 10:53 AM Lemarchand Barker wrote:Buenas, estoy viendo las opciones que me dieron con count(). Ahora viene mi pregunta, cuál sería la diferencia entre lo que me recomendó: Juan José: va = cadena.count('a') Y lo que dijo: Ricardo: >>> from collections import Counter >>> cuentas = Counter(cadena.lower()) >>> va = cuentas.get('a', 0) >>> ve = cuentas.get('e', 0) >>> va 10 >>> ve 7 Gracias, saludos El mié., 15 jul. 2020 a las 21:49, lemarchand8679 () escribió: > > Mañana lo reviso también, muchas gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 15/7/20 21:10 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] max() y min() > > Te voy a dar una mejor: > > >>> from collections import Counter > >>> cuentas = Counter(cadena.lower()) > >>> va = cuentas.get('a', 0) > >>> ve = cuentas.get('e', 0) > >>> va > 10 > >>> ve > 7 > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario. > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites. > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker wrote: >> >> Lo voy a buscar y voy a ver. >> Muchas gracias >> >> El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera >> () escribió: >> > >> > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: >> > >> > va = cadena.count('a') >> > ... >> > >> > Perdón por ser tan parco con el código, estoy desde móvil. >> > >> > >> > >> > >> > El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: >> >> >> >> Hola, vengo con otra pregunta tonta. >> >> Estaba jugando con for, la típica de buscar máximos y mínimos, les >> >> dejo el código: >> >> >> >> lista = [] >> >> >> >> cadena = "Esto es una cadena que contiene varias letras y muchas palabras" >> >> >> >> vocales = ['a', 'e', 'i', 'o', 'u'] >> >> >> >> for x in cadena: >> >>     if x == 'a': >> >>         va = va + 1 >> >>     elif x == 'e': >> >>         ve = ve + 1 >> >>     elif x == 'i': >> >>         vi = vi + 1 >> >>     elif x == 'o': >> >>         vo = vo + 1 >> >>     elif x == 'u': >> >>         vu = vu + 1 >> >> >> >> lista.append(va) >> >> lista.append(ve) >> >> lista.append(vi) >> >> lista.append(vo) >> >> lista.append(vu) >> >> >> >> total = va + ve + vi + vo + vu >> >> >> >> max_item = max(lista, key=int) >> >> min_item = min(lista, key=int) >> >> print(f"Mayor: {max_item}") >> >> print(f"Menor: {min_item}") >> >> >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y >> >> min para tratar de buscar cuál es la vocal que más se repite y menos >> >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten >> >> solamente 2 veces, que son: i y o. Asumo que por el orden de los >> >> elementos en la lista el 2 que muestra se corresponde a la i. >> >> Bueno eso es todo, consultar si está bien utilizado el max y el min, >> >> saludos y gracias. >> >> _______________________________________________ >> >> Python-es mailing list >> >> Python-es en python.org >> >> https://mail.python.org/mailman/listinfo/python-es >> > >> > _______________________________________________ >> > Python-es mailing list >> > Python-es en python.org >> > https://mail.python.org/mailman/listinfo/python-es >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ricardo.cardenes en gmail.com Thu Jul 16 17:35:49 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Thu, 16 Jul 2020 11:35:49 -1000 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> Message-ID: La principal diferencia está en cómo se cuentan las cosas. Esto: va = cadena.count('a') recorre la cadena entera buscando únicamente la letra "a". Y te devuelve la cuenta. Luego repites la operación con la "e" y hay que recorrer la cadena entera otra vez. Y luego repites con la "i" y hay que repetir toda la operación de nuevo. Así con cada letra que busques. Esto otro: cuentas = Counter(cadena.lower()) recorre la cadena una única vez y te devuelve un diccionario con la cuenta de repeticiones *de cada uno de los caracteres distintos en la cadena*. *Pros y contras*: El método count estará optimizado para buscar subcadenas. Además, se concentra en contar una sola, así que realiza menos operaciones. Sería el ideal para buscar una única letra. Es la única opción que tienes si quieres buscar subcadenas de más de una letra (Counter cuenta elementos separados, únicamente). Counter es más genérico: sirve no sólo para cadenas sino para cualquier tipo de secuencia (listas, tuplas, ...) Su gran ventaja es que sólo lo ejecutas una vez y ya has contado *todo*. Por tanto, escoger cual usar depende de lo que estés haciendo. Si vas a buscar más de un carácter, a tamaños de cadena que no sean gigantescos, probablemente no vaya a haber una gran diferencia y es posible que count sea más rápido. Si estás buscando muchos caracteres diferentes y, especialmente, si las cadenas son muy largas, entonces Counter empieza a ser más conveniente y más rápido en general por la simple razón de que *sólo vas a necesitar recorrer la secuencia una vez*. La desventaja principal de Counter es que, mientras count te devuelve un simple entero, el objeto devuelto por Counter ocupa memoria proporcionalmente al número de elementos distintos que haya en la secuencia. Si esto va a ser un problema o no depende de tus datos y de la cantidad de memoria de que dispongas. Pero yo no me centraría en asuntos de rendimiento en este momento, principalmente cuando parece que aún no dominas el lenguaje. Quitando eso, la ventaja principal de Counter es que es mucho más ágil cuando necesitas contar muchas cosas diferentes y cuando no sabes a priori qué vas a necesitar contar. On Thu, Jul 16, 2020 at 4:53 AM Lemarchand Barker wrote: > Buenas, estoy viendo las opciones que me dieron con count(). > Ahora viene mi pregunta, cuál sería la diferencia entre lo que me > recomendó: > Juan José: > va = cadena.count('a') > > Y lo que dijo: > Ricardo: > > >>> from collections import Counter > >>> cuentas = Counter(cadena.lower()) > >>> va = cuentas.get('a', 0) > >>> ve = cuentas.get('e', 0) > >>> va > 10 > >>> ve > 7 > > Gracias, saludos > > El mié., 15 jul. 2020 a las 21:49, lemarchand8679 > () escribió: > > > > Mañana lo reviso también, muchas gracias > > > > > > > > Enviado desde mi smartphone Samsung Galaxy. > > > > > > -------- Mensaje original -------- > > De: Ricardo Cárdenes > > Fecha: 15/7/20 21:10 (GMT-03:00) > > A: La lista de python en castellano > > Asunto: Re: [Python-es] [Consulta] max() y min() > > > > Te voy a dar una mejor: > > > > >>> from collections import Counter > > >>> cuentas = Counter(cadena.lower()) > > >>> va = cuentas.get('a', 0) > > >>> ve = cuentas.get('e', 0) > > >>> va > > 10 > > >>> ve > > 7 > > > > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma > interfaz que un diccionario. > > > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas > las vocales, no sólo las minúsculas. Adáptalo según necesites. > > > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >> > >> Lo voy a buscar y voy a ver. > >> Muchas gracias > >> > >> El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera > >> () escribió: > >> > > >> > Hola, como uso te hace la función q necesitas, yo sin embargo > recortaria código usando count: > >> > > >> > va = cadena.count('a') > >> > ... > >> > > >> > Perdón por ser tan parco con el código, estoy desde móvil. > >> > > >> > > >> > > >> > > >> > El mié., 15 jul. 2020 22:28, Lemarchand Barker < > lemarchand8679 en gmail.com> escribió: > >> >> > >> >> Hola, vengo con otra pregunta tonta. > >> >> Estaba jugando con for, la típica de buscar máximos y mínimos, les > >> >> dejo el código: > >> >> > >> >> lista = [] > >> >> > >> >> cadena = "Esto es una cadena que contiene varias letras y muchas > palabras" > >> >> > >> >> vocales = ['a', 'e', 'i', 'o', 'u'] > >> >> > >> >> for x in cadena: > >> >> if x == 'a': > >> >> va = va + 1 > >> >> elif x == 'e': > >> >> ve = ve + 1 > >> >> elif x == 'i': > >> >> vi = vi + 1 > >> >> elif x == 'o': > >> >> vo = vo + 1 > >> >> elif x == 'u': > >> >> vu = vu + 1 > >> >> > >> >> lista.append(va) > >> >> lista.append(ve) > >> >> lista.append(vi) > >> >> lista.append(vo) > >> >> lista.append(vu) > >> >> > >> >> total = va + ve + vi + vo + vu > >> >> > >> >> max_item = max(lista, key=int) > >> >> min_item = min(lista, key=int) > >> >> print(f"Mayor: {max_item}") > >> >> print(f"Menor: {min_item}") > >> >> > >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y > >> >> min para tratar de buscar cuál es la vocal que más se repite y menos > >> >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten > >> >> solamente 2 veces, que son: i y o. Asumo que por el orden de los > >> >> elementos en la lista el 2 que muestra se corresponde a la i. > >> >> Bueno eso es todo, consultar si está bien utilizado el max y el min, > >> >> saludos y gracias. > >> >> _______________________________________________ > >> >> Python-es mailing list > >> >> Python-es en python.org > >> >> https://mail.python.org/mailman/listinfo/python-es > >> > > >> > _______________________________________________ > >> > Python-es mailing list > >> > Python-es en python.org > >> > https://mail.python.org/mailman/listinfo/python-es > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From javierperez en perasalvino.es Sat Jul 18 04:38:22 2020 From: javierperez en perasalvino.es (Javier Perez) Date: Sat, 18 Jul 2020 10:38:22 +0200 Subject: [Python-es] =?utf-8?q?Que_libro_me_recomenda=C3=ADs?= Message-ID: Hola, Para un nivel medio de python, ¿qué libro me recomendáis? No tiene porque ser impreso, me valdría: PDF, web, curso. Es que veo mucho por internet pero suele ser un nivel inicial. Que siendo sinceros, todavía me queda, pero bueno, por ir un poco sobre seguro. Saludos, -- Javier Pérez http://es.linkedin.com/in/javierperez1 http://www.perasalvino.es/ ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From anlismon en gmail.com Sat Jul 18 07:53:48 2020 From: anlismon en gmail.com (Angel Lis) Date: Sat, 18 Jul 2020 13:53:48 +0200 Subject: [Python-es] =?utf-8?q?Que_libro_me_recomenda=C3=ADs?= In-Reply-To: References: Message-ID: IMHO, Sin lugar a dudas, automate the boring stuff with python. https://automatetheboringstuff.com/ El sáb., 18 jul. 2020 10:39, Javier Perez escribió: > Hola, > > > Para un nivel medio de python, ¿qué libro me recomendáis? > > No tiene porque ser impreso, me valdría: PDF, web, curso. > > Es que veo mucho por internet pero suele ser un nivel inicial. > > Que siendo sinceros, todavía me queda, pero bueno, por ir un poco sobre > seguro. > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From javierperez en perasalvino.es Sat Jul 18 11:16:24 2020 From: javierperez en perasalvino.es (Javier Perez) Date: Sat, 18 Jul 2020 17:16:24 +0200 Subject: [Python-es] =?utf-8?q?Que_libro_me_recomenda=C3=ADs?= In-Reply-To: References: Message-ID: <0047FB01-95A9-4A52-9905-FE250CC09B67@perasalvino.es> Gracias, si, tiene buena pinta pero no me defiendo tan bien en ingles como para leerlo. Prefiero que sea en castellano. Saludos, -- Javier Pérez http://es.linkedin.com/in/javierperez1 http://www.perasalvino.es/ > El 18 jul 2020, a las 13:53, Angel Lis escribió: > > IMHO, > Sin lugar a dudas, automate the boring stuff with python. > > https://automatetheboringstuff.com/ > > > > El sáb., 18 jul. 2020 10:39, Javier Perez > escribió: > Hola, > > > Para un nivel medio de python, ¿qué libro me recomendáis? > > No tiene porque ser impreso, me valdría: PDF, web, curso. > > Es que veo mucho por internet pero suele ser un nivel inicial. > > Que siendo sinceros, todavía me queda, pero bueno, por ir un poco sobre seguro. > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Sat Jul 18 13:12:40 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Sat, 18 Jul 2020 14:12:40 -0300 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: Message-ID: <5f132d8c.1c69fb81.1013.c1e7@mx.google.com> Impecable Ricardo, muchísimas gracias.Si bien me sirve increíblemente conocer las diferencias entre ambos y saber sus posibles aplicaciones, con: cadena.count() ya me es suficiente. GraciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 16/7/20 18:37 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] max() y min() La principal diferencia está en cómo se cuentan las cosas. Esto:va = cadena.count('a')recorre la cadena entera buscando únicamente la letra "a". Y te devuelve la cuenta. Luego repites la operación con la "e" y hay que recorrer la cadena entera otra vez. Y luego repites con la "i" y hay que repetir toda la operación de nuevo. Así con cada letra que busques.Esto otro:cuentas = Counter(cadena.lower())recorre la cadena una única vez y te devuelve un diccionario con la cuenta de repeticiones de cada uno de los caracteres distintos en la cadena.Pros y contras:El método count estará optimizado para buscar subcadenas. Además, se concentra en contar una sola, así que realiza menos operaciones. Sería el ideal para buscar una única letra. Es la única opción que tienes si quieres buscar subcadenas de más de una letra (Counter cuenta elementos separados, únicamente).Counter es más genérico: sirve no sólo para cadenas sino para cualquier tipo de secuencia (listas, tuplas, ...) Su gran ventaja es que sólo lo ejecutas una vez y ya has contado todo.Por tanto, escoger cual usar depende de lo que estés haciendo. Si vas a buscar más de un carácter, a tamaños de cadena que no sean gigantescos, probablemente no vaya a haber una gran diferencia y es posible que count sea más rápido.Si estás buscando muchos caracteres diferentes y, especialmente, si las cadenas son muy largas, entonces Counter empieza a ser más conveniente y más rápido en general por la simple razón de que sólo vas a necesitar recorrer la secuencia una vez.La desventaja principal de Counter es que, mientras count te devuelve un simple entero, el objeto devuelto por Counter ocupa memoria proporcionalmente al número de elementos distintos que haya en la secuencia. Si esto va a ser un problema o no depende de tus datos y de la cantidad de memoria de que dispongas.Pero yo no me centraría en asuntos de rendimiento en este momento, principalmente cuando parece que aún no dominas el lenguaje. Quitando eso, la ventaja principal de Counter es que es mucho más ágil cuando necesitas contar muchas cosas diferentes y cuando no sabes a priori qué vas a necesitar contar.On Thu, Jul 16, 2020 at 4:53 AM Lemarchand Barker wrote:Buenas, estoy viendo las opciones que me dieron con count(). Ahora viene mi pregunta, cuál sería la diferencia entre lo que me recomendó: Juan José: va = cadena.count('a') Y lo que dijo: Ricardo: >>> from collections import Counter >>> cuentas = Counter(cadena.lower()) >>> va = cuentas.get('a', 0) >>> ve = cuentas.get('e', 0) >>> va 10 >>> ve 7 Gracias, saludos El mié., 15 jul. 2020 a las 21:49, lemarchand8679 () escribió: > > Mañana lo reviso también, muchas gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 15/7/20 21:10 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] max() y min() > > Te voy a dar una mejor: > > >>> from collections import Counter > >>> cuentas = Counter(cadena.lower()) > >>> va = cuentas.get('a', 0) > >>> ve = cuentas.get('e', 0) > >>> va > 10 > >>> ve > 7 > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario. > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites. > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker wrote: >> >> Lo voy a buscar y voy a ver. >> Muchas gracias >> >> El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera >> () escribió: >> > >> > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: >> > >> > va = cadena.count('a') >> > ... >> > >> > Perdón por ser tan parco con el código, estoy desde móvil. >> > >> > >> > >> > >> > El mié., 15 jul. 2020 22:28, Lemarchand Barker escribió: >> >> >> >> Hola, vengo con otra pregunta tonta. >> >> Estaba jugando con for, la típica de buscar máximos y mínimos, les >> >> dejo el código: >> >> >> >> lista = [] >> >> >> >> cadena = "Esto es una cadena que contiene varias letras y muchas palabras" >> >> >> >> vocales = ['a', 'e', 'i', 'o', 'u'] >> >> >> >> for x in cadena: >> >>     if x == 'a': >> >>         va = va + 1 >> >>     elif x == 'e': >> >>         ve = ve + 1 >> >>     elif x == 'i': >> >>         vi = vi + 1 >> >>     elif x == 'o': >> >>         vo = vo + 1 >> >>     elif x == 'u': >> >>         vu = vu + 1 >> >> >> >> lista.append(va) >> >> lista.append(ve) >> >> lista.append(vi) >> >> lista.append(vo) >> >> lista.append(vu) >> >> >> >> total = va + ve + vi + vo + vu >> >> >> >> max_item = max(lista, key=int) >> >> min_item = min(lista, key=int) >> >> print(f"Mayor: {max_item}") >> >> print(f"Menor: {min_item}") >> >> >> >> Bueno mi consulta es la siguiente, está bien que haya utilizado max y >> >> min para tratar de buscar cuál es la vocal que más se repite y menos >> >> se repite? Pero el tema es el siguiente hay 2 vocales que se repiten >> >> solamente 2 veces, que son: i y o. Asumo que por el orden de los >> >> elementos en la lista el 2 que muestra se corresponde a la i. >> >> Bueno eso es todo, consultar si está bien utilizado el max y el min, >> >> saludos y gracias. >> >> _______________________________________________ >> >> Python-es mailing list >> >> Python-es en python.org >> >> https://mail.python.org/mailman/listinfo/python-es >> > >> > _______________________________________________ >> > Python-es mailing list >> > Python-es en python.org >> > https://mail.python.org/mailman/listinfo/python-es >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Sun Jul 19 15:22:23 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Sun, 19 Jul 2020 16:22:23 -0300 Subject: [Python-es] [Consulta] Leer csv Message-ID: Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. El código es el siguiente: import csv # with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: with open('population.csv', 'rt') as File: reader = csv.reader(File) for row in reader: print(row) La salida es la siguiente: ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] Traceback (most recent call last): File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in for row in reader: File "/usr/lib/python3.8/codecs.py", line 322, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 El contenido del csv se puede ver en este link (formato pdf): pdf El original se encuentra acá: http://data.un.org/ El csv es desde la izquierda, la primer columna, donde dice: - Population, surface area and density - PDF | CSV Updated: 23-Jul-2019 Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. Saludos, gracias ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From darioslc en protonmail.com Sun Jul 19 15:46:01 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Sun, 19 Jul 2020 19:46:01 +0000 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: Message-ID: > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. Hola, no te conviene leerlo usando pandas, es bastante más simple, si archivo es el nombre del csv, o sea archivo.csv: import pandas as pd leer = pd.read_csv('ruta/archivo.csv') # si querés ver los nombres de columna: leer.columns # si querés ver los últimos diez valores leer.tail(10) # si querés ver los primeros 23 valores leer.head(23) # una columna específica leer['nombre_columna'] también hay muchas más opciones si el csv tiene un índice específico como ser por fechas, o también indexar directamente por la columna específica que quieras, basta agregar index_col = # en pd.read_csv Espero te sirva, pandas para este tipo de archivos es ideal. Saludos! > El código es el siguiente: > > import csv > > # with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: > with open('population.csv', 'rt') as File: > reader = csv.reader(File) > for row in reader: > print(row) > > La salida es la siguiente: > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] > Traceback (most recent call last): > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in > for row in reader: > File "/usr/lib/python3.8/codecs.py", line 322, in decode > (result, consumed) = self._buffer_decode(data, self.errors, final) > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte > > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: > > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 > > El contenido del csv se puede ver en este link (formato pdf): [pdf](http://data.un.org/_Docs/SYB/PDFs/SYB62_1_201907_Population,%20Surface%20Area%20and%20Density.pdf) > El original se encuentra acá: http://data.un.org/ > El csv es desde la izquierda, la primer columna, donde dice: - Population, surface area and density > - [PDF](http://data.un.org/_Docs/SYB/PDFs/SYB62_1_201907_Population, Surface Area and Density.pdf) | [CSV](http://data.un.org/_Docs/SYB/CSV/SYB62_1_201907_Population, Surface Area and Density.csv) Updated: 23-Jul-2019 > > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. > Saludos, gracias ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Sun Jul 19 15:49:13 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Sun, 19 Jul 2020 16:49:13 -0300 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: Message-ID: Estoy probando copiar un poco de la data del csv, lo pasé a un editor y el código funcionó perfecto. No se si el archivo original tendrá algún inconveniente, mi código o funciona porque copié una parte de la info y no todo el resto. Adjunto el archivito que hice, el código no lo toqué, lo único que hice fue comentar la línea del with para colocar el nombre nuevo, y quedó así: with open('demo.csv', 'rt') as File: Y la salida es la siguiente: ['T02 Region/Contry/Area', ' Population density and surface area', ' Year', ' Series', ' Value'] ['1', ' Total all countries or areas', ' 2005', ' Population mid-year estimates (millions)', ' 6541.9070'] ['1', ' Total all countries or areas', ' 2005', ' Population mid-year estimates for males (millions)', ' 3296.4853'] ['1', ' Total all countries or areas', ' 2005', ' Population mid-year estimates for females (millions)', ' 3245.4217'] ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per 100 females)', ' 101.5734'] ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to 14 years old (porcentage)', ' 28.1425'] ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+ years old (porcentage)', ' 10.2516'] [] Justo mando esto cuando Darío me respondió. Saludos El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker () escribió: > > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. > > El código es el siguiente: > > import csv > > # with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: > with open('population.csv', 'rt') as File: > reader = csv.reader(File) > for row in reader: > print(row) > > La salida es la siguiente: > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] > Traceback (most recent call last): > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in > for row in reader: > File "/usr/lib/python3.8/codecs.py", line 322, in decode > (result, consumed) = self._buffer_decode(data, self.errors, final) > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte > > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 > > El contenido del csv se puede ver en este link (formato pdf): pdf > El original se encuentra acá: http://data.un.org/ > El csv es desde la izquierda, la primer columna, donde dice: > > Population, surface area and density > PDF | CSV Updated: 23-Jul-2019 > > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. > Saludos, gracias ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : demo.csv Tipo : text/csv Tamaño : 646 bytes Descripción: no disponible Url : From darioslc en protonmail.com Sun Jul 19 16:08:41 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Sun, 19 Jul 2020 20:08:41 +0000 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: Message-ID: <5yMh8YKVofYIPnWIRFw8-OXpZxUIPjffe02UV8A-tHykz-gyDfcnhbH1sgjKtd6jrzG8C7wpV-dnRV_W-sKwNds63wI8XbKwHAPq7Y8qYnU=@protonmail.com> Usando el archivo original éstas son las salidas: >>> import pandas as pd >>> leer = pd.read_csv('/home/darioslc/Descargas/demo.csv') >>> leer T02 Region/Contry/Area ... Value 0 1 ... 6541.9070 1 1 ... 3296.4853 2 1 ... 3245.4217 3 1 ... 101.5734 4 1 ... 28.1425 5 1 ... 10.2516 [6 rows x 5 columns] >>> leer.columns # muestra todas las columnas Index(['T02 Region/Contry/Area', ' Population density and surface area', ' Year', ' Series', ' Value'], dtype='object') >>> leer.columns[0] 'T02 Region/Contry/Area' >>> leer[leer.columns[2]] 0 2005 1 2005 2 2005 3 2005 4 2005 5 2005 Name: Year, dtype: int64 >>> leer[:] # muestra todo T02 Region/Contry/Area ... Value 0 1 ... 6541.9070 1 1 ... 3296.4853 2 1 ... 3245.4217 3 1 ... 101.5734 4 1 ... 28.1425 5 1 ... 10.2516 [6 rows x 5 columns] >>> leer[0:3] # muestra de la columna 0 a la 3 T02 Region/Contry/Area ... Value 0 1 ... 6541.9070 1 1 ... 3296.4853 2 1 ... 3245.4217 [3 rows x 5 columns] >>> # renombro la primer columna >>> leer2 = leer.rename(columns = {leer.columns[0]:'regione'}) >>> leer2 regione ... Value 0 1 ... 6541.9070 1 1 ... 3296.4853 2 1 ... 3245.4217 3 1 ... 101.5734 4 1 ... 28.1425 5 1 ... 10.2516 [6 rows x 5 columns] No muestra todos los datos porque los nombres de columna son excesivamente largos, se puede renombrar con el comando anterior separando por comas lo renombrado (primero va el nombre viejo y después de los : el nuevo) Luego de abierto lo que podés hacer con pandas es realmente todo!!! desde calcular valores medios, máximos, mínimos, interpolar, graficar, etc........ - Sent with ProtonMail Secure Email. ??????? Original Message ??????? On Sunday, 19 de July de 2020 16:49, Lemarchand Barker wrote: > Estoy probando copiar un poco de la data del csv, lo pasé a un editor > y el código funcionó perfecto. No se si el archivo original tendrá > algún inconveniente, mi código o funciona porque copié una parte de la > info y no todo el resto. > Adjunto el archivito que hice, el código no lo toqué, lo único que > hice fue comentar la línea del with para colocar el nombre nuevo, y > quedó así: > > with open('demo.csv', 'rt') as File: > > Y la salida es la siguiente: > ['T02 Region/Contry/Area', ' Population density and surface area', ' > Year', ' Series', ' Value'] > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > estimates (millions)', ' 6541.9070'] > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > estimates for males (millions)', ' 3296.4853'] > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > estimates for females (millions)', ' 3245.4217'] > ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per > 100 females)', ' 101.5734'] > ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to > 14 years old (porcentage)', ' 28.1425'] > ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+ > years old (porcentage)', ' 10.2516'] > [] > Justo mando esto cuando Darío me respondió. Saludos > > El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker > (lemarchand8679 en gmail.com) escribió: > > > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. > > El código es el siguiente: > > import csv > > > > with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: > > > > ========================================================================================= > > > > with open('population.csv', 'rt') as File: > > reader = csv.reader(File) > > for row in reader: > > print(row) > > La salida es la siguiente: > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] > > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] > > Traceback (most recent call last): > > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in > > for row in reader: > > File "/usr/lib/python3.8/codecs.py", line 322, in decode > > (result, consumed) = self._buffer_decode(data, self.errors, final) > > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte > > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: > > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 > > El contenido del csv se puede ver en este link (formato pdf): pdf > > El original se encuentra acá: http://data.un.org/ > > El csv es desde la izquierda, la primer columna, donde dice: > > Population, surface area and density > > PDF | CSV Updated: 23-Jul-2019 > > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. > > Saludos, gracias > > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From lemarchand8679 en gmail.com Sun Jul 19 16:14:52 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Sun, 19 Jul 2020 17:14:52 -0300 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: <5yMh8YKVofYIPnWIRFw8-OXpZxUIPjffe02UV8A-tHykz-gyDfcnhbH1sgjKtd6jrzG8C7wpV-dnRV_W-sKwNds63wI8XbKwHAPq7Y8qYnU=@protonmail.com> Message-ID: <5f14a9c0.1c69fb81.ca797.2977@mx.google.com> Ahora me quedó más claro, que tengo que usar pandas, en el mail anterior no lo había entendido. GraciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Darío vía Python-es Fecha: 19/7/20 17:10 (GMT-03:00) A: La lista de python en castellano CC: Darío Asunto: Re: [Python-es] [Consulta] Leer csv Usando el archivo original éstas son las salidas:>>> import pandas as pd>>> leer = pd.read_csv('/home/darioslc/Descargas/demo.csv')>>> leer   T02 Region/Contry/Area    ...          Value0                       1    ...      6541.90701                       1    ...      3296.48532                       1    ...      3245.42173                       1    ...       101.57344                       1    ...        28.14255                       1    ...        10.2516[6 rows x 5 columns]>>> leer.columns # muestra todas las columnasIndex(['T02 Region/Contry/Area', ' Population density and surface area',       ' Year', ' Series', ' Value'],      dtype='object')>>> leer.columns[0]'T02 Region/Contry/Area'>>> leer[leer.columns[2]]0    20051    20052    20053    20054    20055    2005Name:  Year, dtype: int64>>> leer[:] # muestra todo   T02 Region/Contry/Area    ...          Value0                       1    ...      6541.90701                       1    ...      3296.48532                       1    ...      3245.42173                       1    ...       101.57344                       1    ...        28.14255                       1    ...        10.2516[6 rows x 5 columns]>>> leer[0:3] # muestra de la columna 0 a la 3   T02 Region/Contry/Area    ...          Value0                       1    ...      6541.90701                       1    ...      3296.48532                       1    ...      3245.4217[3 rows x 5 columns]>>> # renombro la primer columna>>> leer2 = leer.rename(columns = {leer.columns[0]:'regione'})>>> leer2   regione    ...          Value0        1    ...      6541.90701        1    ...      3296.48532        1    ...      3245.42173        1    ...       101.57344        1    ...        28.14255        1    ...        10.2516[6 rows x 5 columns]No muestra todos los datos porque los nombres de columna son excesivamente largos, se puede renombrar con el comando anterior separando por comas lo renombrado (primero va el nombre viejo y después de los : el nuevo)Luego de abierto lo que podés hacer con pandas es realmente todo!!! desde calcular valores medios, máximos, mínimos, interpolar, graficar, etc........-Sent with ProtonMail Secure Email.??????? Original Message ???????On Sunday, 19 de July de 2020 16:49, Lemarchand Barker wrote:> Estoy probando copiar un poco de la data del csv, lo pasé a un editor> y el código funcionó perfecto. No se si el archivo original tendrá> algún inconveniente, mi código o funciona porque copié una parte de la> info y no todo el resto.> Adjunto el archivito que hice, el código no lo toqué, lo único que> hice fue comentar la línea del with para colocar el nombre nuevo, y> quedó así:>> with open('demo.csv', 'rt') as File:>> Y la salida es la siguiente:> ['T02 Region/Contry/Area', ' Population density and surface area', '> Year', ' Series', ' Value']> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year> estimates (millions)', ' 6541.9070']> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year> estimates for males (millions)', ' 3296.4853']> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year> estimates for females (millions)', ' 3245.4217']> ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per> 100 females)', ' 101.5734']> ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to> 14 years old (porcentage)', ' 28.1425']> ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+> years old (porcentage)', ' 10.2516']> []> Justo mando esto cuando Darío me respondió. Saludos>> El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker> (lemarchand8679 en gmail.com) escribió:>> > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error.> > El código es el siguiente:> > import csv> >> > with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File:> >> > =========================================================================================> >> > with open('population.csv', 'rt') as File:> > reader = csv.reader(File)> > for row in reader:> > print(row)> > La salida es la siguiente:> > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.']> > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.']> > Traceback (most recent call last):> > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in > > for row in reader:> > File "/usr/lib/python3.8/codecs.py", line 322, in decode> > (result, consumed) = self._buffer_decode(data, self.errors, final)> > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte> > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original.> > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente:> > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903> > El contenido del csv se puede ver en este link (formato pdf): pdf> > El original se encuentra acá: http://data.un.org/> > El csv es desde la izquierda, la primer columna, donde dice:> > Population, surface area and density> > PDF | CSV Updated: 23-Jul-2019> > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode.> > Saludos, gracias>> Python-es mailing list> Python-es en python.org> https://mail.python.org/mailman/listinfo/python-es_______________________________________________Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From darioslc en protonmail.com Sun Jul 19 16:22:56 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Sun, 19 Jul 2020 20:22:56 +0000 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: <5f14a9c0.1c69fb81.ca797.2977@mx.google.com> References: <5f14a9c0.1c69fb81.ca797.2977@mx.google.com> Message-ID: > Ahora me quedó más claro, que tengo que usar pandas, en el mail anterior no lo había entendido. Gracias Sí perdón la desprolijidad! mejor aún es la documentación del paquete, la oficial está en inglés y son miles de páginas, esta página me ayudó mucho con pandas y otras librerías y python per sé: https://riptutorial.com/es/topic?q=pandas&submit=Search > Enviado desde mi smartphone Samsung Galaxy. > > -------- Mensaje original -------- > De: Darío vía Python-es > Fecha: 19/7/20 17:10 (GMT-03:00) > A: La lista de python en castellano > CC: Darío > Asunto: Re: [Python-es] [Consulta] Leer csv > > Usando el archivo original éstas son las salidas: >>>> import pandas as pd > >>>> leer = pd.read_csv('/home/darioslc/Descargas/demo.csv') > >>>> leer > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > >>>> leer.columns # muestra todas las columnas > Index(['T02 Region/Contry/Area', ' Population density and surface area', > ' Year', ' Series', ' Value'], > dtype='object') > >>>> leer.columns[0] > 'T02 Region/Contry/Area' > >>>> leer[leer.columns[2]] > 0 2005 > 1 2005 > 2 2005 > 3 2005 > 4 2005 > 5 2005 > Name: Year, dtype: int64 > >>>> leer[:] # muestra todo > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > >>>> leer[0:3] # muestra de la columna 0 a la 3 > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > > [3 rows x 5 columns] > >>>> # renombro la primer columna > >>>> leer2 = leer.rename(columns = {leer.columns[0]:'regione'}) > >>>> leer2 > regione ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > > No muestra todos los datos porque los nombres de columna son excesivamente largos, se puede renombrar con el comando anterior separando por comas lo renombrado (primero va el nombre viejo y después de los : el nuevo) > > Luego de abierto lo que podés hacer con pandas es realmente todo!!! desde calcular valores medios, máximos, mínimos, interpolar, graficar, etc........ > > - > > Sent with ProtonMail Secure Email. > > ??????? Original Message ??????? > On Sunday, 19 de July de 2020 16:49, Lemarchand Barker wrote: > >> Estoy probando copiar un poco de la data del csv, lo pasé a un editor >> y el código funcionó perfecto. No se si el archivo original tendrá >> algún inconveniente, mi código o funciona porque copié una parte de la >> info y no todo el resto. >> Adjunto el archivito que hice, el código no lo toqué, lo único que >> hice fue comentar la línea del with para colocar el nombre nuevo, y >> quedó así: >> >> with open('demo.csv', 'rt') as File: >> >> Y la salida es la siguiente: >> ['T02 Region/Contry/Area', ' Population density and surface area', ' >> Year', ' Series', ' Value'] >> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> estimates (millions)', ' 6541.9070'] >> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> estimates for males (millions)', ' 3296.4853'] >> ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> estimates for females (millions)', ' 3245.4217'] >> ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per >> 100 females)', ' 101.5734'] >> ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to >> 14 years old (porcentage)', ' 28.1425'] >> ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+ >> years old (porcentage)', ' 10.2516'] >> [] >> Justo mando esto cuando Darío me respondió. Saludos >> >> El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker >> (lemarchand8679 en gmail.com) escribió: >> >> > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. >> > El código es el siguiente: >> > import csv >> > >> > with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: >> > >> > ========================================================================================= >> > >> > with open('population.csv', 'rt') as File: >> > reader = csv.reader(File) >> > for row in reader: >> > print(row) >> > La salida es la siguiente: >> > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] >> > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] >> > Traceback (most recent call last): >> > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in >> > for row in reader: >> > File "/usr/lib/python3.8/codecs.py", line 322, in decode >> > (result, consumed) = self._buffer_decode(data, self.errors, final) >> > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte >> > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. >> > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: >> > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 >> > El contenido del csv se puede ver en este link (formato pdf): pdf >> > El original se encuentra acá: http://data.un.org/ >> > El csv es desde la izquierda, la primer columna, donde dice: >> > Population, surface area and density >> > PDF | CSV Updated: 23-Jul-2019 >> > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. >> > Saludos, gracias >> >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From ciberseba en gmail.com Sun Jul 19 16:36:02 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Sun, 19 Jul 2020 16:36:02 -0400 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: <5f14a9c0.1c69fb81.ca797.2977@mx.google.com> Message-ID: Y pandas te abre un mundo de cosas... el inicio para ir aprendiendo data science. Saludos. On Sun, Jul 19, 2020 at 4:23 PM Darío vía Python-es wrote: > > Ahora me quedó más claro, que tengo que usar pandas, en el mail anterior > no lo había entendido. Gracias > > > Sí perdón la desprolijidad! mejor aún es la documentación del paquete, la > oficial está en inglés y son miles de páginas, esta página me ayudó mucho > con pandas y otras librerías y python per sé: > https://riptutorial.com/es/topic?q=pandas&submit=Search > > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Darío vía Python-es > Fecha: 19/7/20 17:10 (GMT-03:00) > A: La lista de python en castellano > CC: Darío > Asunto: Re: [Python-es] [Consulta] Leer csv > > Usando el archivo original éstas son las salidas: > >>> import pandas as pd > > >>> leer = pd.read_csv('/home/darioslc/Descargas/demo.csv') > > >>> leer > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > > >>> leer.columns # muestra todas las columnas > Index(['T02 Region/Contry/Area', ' Population density and surface area', > ' Year', ' Series', ' Value'], > dtype='object') > > >>> leer.columns[0] > 'T02 Region/Contry/Area' > > >>> leer[leer.columns[2]] > 0 2005 > 1 2005 > 2 2005 > 3 2005 > 4 2005 > 5 2005 > Name: Year, dtype: int64 > > >>> leer[:] # muestra todo > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > > >>> leer[0:3] # muestra de la columna 0 a la 3 > T02 Region/Contry/Area ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > > [3 rows x 5 columns] > > >>> # renombro la primer columna > > >>> leer2 = leer.rename(columns = {leer.columns[0]:'regione'}) > > >>> leer2 > regione ... Value > 0 1 ... 6541.9070 > 1 1 ... 3296.4853 > 2 1 ... 3245.4217 > 3 1 ... 101.5734 > 4 1 ... 28.1425 > 5 1 ... 10.2516 > > [6 rows x 5 columns] > > No muestra todos los datos porque los nombres de columna son excesivamente > largos, se puede renombrar con el comando anterior separando por comas lo > renombrado (primero va el nombre viejo y después de los : el nuevo) > > Luego de abierto lo que podés hacer con pandas es realmente todo!!! desde > calcular valores medios, máximos, mínimos, interpolar, graficar, etc........ > > - > > Sent with ProtonMail Secure Email. > > ??????? Original Message ??????? > On Sunday, 19 de July de 2020 16:49, Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > > > Estoy probando copiar un poco de la data del csv, lo pasé a un editor > > y el código funcionó perfecto. No se si el archivo original tendrá > > algún inconveniente, mi código o funciona porque copié una parte de la > > info y no todo el resto. > > Adjunto el archivito que hice, el código no lo toqué, lo único que > > hice fue comentar la línea del with para colocar el nombre nuevo, y > > quedó así: > > > > with open('demo.csv', 'rt') as File: > > > > Y la salida es la siguiente: > > ['T02 Region/Contry/Area', ' Population density and surface area', ' > > Year', ' Series', ' Value'] > > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > > estimates (millions)', ' 6541.9070'] > > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > > estimates for males (millions)', ' 3296.4853'] > > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year > > estimates for females (millions)', ' 3245.4217'] > > ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per > > 100 females)', ' 101.5734'] > > ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to > > 14 years old (porcentage)', ' 28.1425'] > > ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+ > > years old (porcentage)', ' 10.2516'] > > [] > > Justo mando esto cuando Darío me respondió. Saludos > > > > El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker > > (lemarchand8679 en gmail.com) escribió: > > > > > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré > que lo haga, pero el problema viene cuando lee. Me muestra el resultado y > al final me da un mensaje de error. > > > El código es el siguiente: > > > import csv > > > > > > with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', > newline='') as File: > > > > > > > ========================================================================================= > > > > > > with open('population.csv', 'rt') as File: > > > reader = csv.reader(File) > > > for row in reader: > > > print(row) > > > La salida es la siguiente: > > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for > females (millions)', '2.1369', '', 'United Nations Population Division, New > York, World Population Prospects: The 2019 Revision, last accessed June > 2019.'] > > > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', > '100.5460', '', 'United Nations Population Division, New York, World > Population Prospects: The 2019 Revision; supplemented by data from the > United Nations Statistics Division, New York, Demographic Yearbook 2015 and > Secretariat for the Pacific Community (SPC) for small countries or areas, > last accessed June 2019.'] > > > Traceback (most recent call last): > > > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, > in > > > for row in reader: > > > File "/usr/lib/python3.8/codecs.py", line 322, in decode > > > (result, consumed) = self._buffer_decode(data, self.errors, final) > > > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position > 6529: invalid continuation byte > > > Solo copié un fragmento de toda la salida; lo que se ve antes del > Traceback; porque es bastante extenso el texto. Otra cosa que hice fue > cambiarle el nombre, porque era muy extenso el original. > > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la > siguiente: > > > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old > (percentage) 37.3903 > > > El contenido del csv se puede ver en este link (formato pdf): pdf > > > El original se encuentra acá: http://data.un.org/ > > > El csv es desde la izquierda, la primer columna, donde dice: > > > Population, surface area and density > > > PDF | CSV Updated: 23-Jul-2019 > > > Perdón la ignorancia pero no se que puede ser lo que me esté generando > esa salida de Unicode. > > > Saludos, gracias > > > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Sun Jul 19 16:51:05 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Sun, 19 Jul 2020 17:51:05 -0300 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: <5f14a9c0.1c69fb81.ca797.2977@mx.google.com> Message-ID: De lujo Darío y Sebastián, gracias El dom., 19 jul. 2020 a las 17:37, Sebastián Arancibia () escribió: > > Y pandas te abre un mundo de cosas... el inicio para ir aprendiendo data science. > > Saludos. > > On Sun, Jul 19, 2020 at 4:23 PM Darío vía Python-es wrote: >> >> >> Ahora me quedó más claro, que tengo que usar pandas, en el mail anterior no lo había entendido. Gracias >> >> >> Sí perdón la desprolijidad! mejor aún es la documentación del paquete, la oficial está en inglés y son miles de páginas, esta página me ayudó mucho con pandas y otras librerías y python per sé: >> https://riptutorial.com/es/topic?q=pandas&submit=Search >> >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> -------- Mensaje original -------- >> De: Darío vía Python-es >> Fecha: 19/7/20 17:10 (GMT-03:00) >> A: La lista de python en castellano >> CC: Darío >> Asunto: Re: [Python-es] [Consulta] Leer csv >> >> Usando el archivo original éstas son las salidas: >> >>> import pandas as pd >> >> >>> leer = pd.read_csv('/home/darioslc/Descargas/demo.csv') >> >> >>> leer >> T02 Region/Contry/Area ... Value >> 0 1 ... 6541.9070 >> 1 1 ... 3296.4853 >> 2 1 ... 3245.4217 >> 3 1 ... 101.5734 >> 4 1 ... 28.1425 >> 5 1 ... 10.2516 >> >> [6 rows x 5 columns] >> >> >>> leer.columns # muestra todas las columnas >> Index(['T02 Region/Contry/Area', ' Population density and surface area', >> ' Year', ' Series', ' Value'], >> dtype='object') >> >> >>> leer.columns[0] >> 'T02 Region/Contry/Area' >> >> >>> leer[leer.columns[2]] >> 0 2005 >> 1 2005 >> 2 2005 >> 3 2005 >> 4 2005 >> 5 2005 >> Name: Year, dtype: int64 >> >> >>> leer[:] # muestra todo >> T02 Region/Contry/Area ... Value >> 0 1 ... 6541.9070 >> 1 1 ... 3296.4853 >> 2 1 ... 3245.4217 >> 3 1 ... 101.5734 >> 4 1 ... 28.1425 >> 5 1 ... 10.2516 >> >> [6 rows x 5 columns] >> >> >>> leer[0:3] # muestra de la columna 0 a la 3 >> T02 Region/Contry/Area ... Value >> 0 1 ... 6541.9070 >> 1 1 ... 3296.4853 >> 2 1 ... 3245.4217 >> >> [3 rows x 5 columns] >> >> >>> # renombro la primer columna >> >> >>> leer2 = leer.rename(columns = {leer.columns[0]:'regione'}) >> >> >>> leer2 >> regione ... Value >> 0 1 ... 6541.9070 >> 1 1 ... 3296.4853 >> 2 1 ... 3245.4217 >> 3 1 ... 101.5734 >> 4 1 ... 28.1425 >> 5 1 ... 10.2516 >> >> [6 rows x 5 columns] >> >> No muestra todos los datos porque los nombres de columna son excesivamente largos, se puede renombrar con el comando anterior separando por comas lo renombrado (primero va el nombre viejo y después de los : el nuevo) >> >> Luego de abierto lo que podés hacer con pandas es realmente todo!!! desde calcular valores medios, máximos, mínimos, interpolar, graficar, etc........ >> >> - >> >> Sent with ProtonMail Secure Email. >> >> ??????? Original Message ??????? >> On Sunday, 19 de July de 2020 16:49, Lemarchand Barker wrote: >> >> > Estoy probando copiar un poco de la data del csv, lo pasé a un editor >> > y el código funcionó perfecto. No se si el archivo original tendrá >> > algún inconveniente, mi código o funciona porque copié una parte de la >> > info y no todo el resto. >> > Adjunto el archivito que hice, el código no lo toqué, lo único que >> > hice fue comentar la línea del with para colocar el nombre nuevo, y >> > quedó así: >> > >> > with open('demo.csv', 'rt') as File: >> > >> > Y la salida es la siguiente: >> > ['T02 Region/Contry/Area', ' Population density and surface area', ' >> > Year', ' Series', ' Value'] >> > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> > estimates (millions)', ' 6541.9070'] >> > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> > estimates for males (millions)', ' 3296.4853'] >> > ['1', ' Total all countries or areas', ' 2005', ' Population mid-year >> > estimates for females (millions)', ' 3245.4217'] >> > ['1', ' Total all countries or areas', ' 2005', ' Sex ratio (males per >> > 100 females)', ' 101.5734'] >> > ['1', ' Total all countries or areas', ' 2005', ' Population aged 0 to >> > 14 years old (porcentage)', ' 28.1425'] >> > ['1', ' Total all countries or areas', ' 2005', ' Population aged 60+ >> > years old (porcentage)', ' 10.2516'] >> > [] >> > Justo mando esto cuando Darío me respondió. Saludos >> > >> > El dom., 19 jul. 2020 a las 16:22, Lemarchand Barker >> > (lemarchand8679 en gmail.com) escribió: >> > >> > > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que lo haga, pero el problema viene cuando lee. Me muestra el resultado y al final me da un mensaje de error. >> > > El código es el siguiente: >> > > import csv >> > > >> > > with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', newline='') as File: >> > > >> > > ========================================================================================= >> > > >> > > with open('population.csv', 'rt') as File: >> > > reader = csv.reader(File) >> > > for row in reader: >> > > print(row) >> > > La salida es la siguiente: >> > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females (millions)', '2.1369', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision, last accessed June 2019.'] >> > > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', '100.5460', '', 'United Nations Population Division, New York, World Population Prospects: The 2019 Revision; supplemented by data from the United Nations Statistics Division, New York, Demographic Yearbook 2015 and Secretariat for the Pacific Community (SPC) for small countries or areas, last accessed June 2019.'] >> > > Traceback (most recent call last): >> > > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in >> > > for row in reader: >> > > File "/usr/lib/python3.8/codecs.py", line 322, in decode >> > > (result, consumed) = self._buffer_decode(data, self.errors, final) >> > > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: invalid continuation byte >> > > Solo copié un fragmento de toda la salida; lo que se ve antes del Traceback; porque es bastante extenso el texto. Otra cosa que hice fue cambiarle el nombre, porque era muy extenso el original. >> > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la siguiente: >> > > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) 37.3903 >> > > El contenido del csv se puede ver en este link (formato pdf): pdf >> > > El original se encuentra acá: http://data.un.org/ >> > > El csv es desde la izquierda, la primer columna, donde dice: >> > > Population, surface area and density >> > > PDF | CSV Updated: 23-Jul-2019 >> > > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa salida de Unicode. >> > > Saludos, gracias >> > >> > Python-es mailing list >> > Python-es en python.org >> > https://mail.python.org/mailman/listinfo/python-es >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From kachine en protonmail.com Thu Jul 16 11:18:16 2020 From: kachine en protonmail.com (kikocorreoso) Date: Thu, 16 Jul 2020 15:18:16 +0000 Subject: [Python-es] [Consulta] max() y min() In-Reply-To: References: <5f0fa412.1c69fb81.c6d64.44c8@mx.google.com> Message-ID: Sent with ProtonMail Secure Email. ??????? Original Message ??????? On Thursday, 16 de July de 2020 16:53, Lemarchand Barker wrote: > Buenas, estoy viendo las opciones que me dieron con count(). > Ahora viene mi pregunta, cuál sería la diferencia entre lo que me recomendó: > Juan José: > va = cadena.count('a') Para que sea igual que usando Counter deberías usar cadena.lower().count('a'). En este primer caso solo contará lo que le pidas. > > Y lo que dijo: > Ricardo: > > > > > from collections import Counter > > > > cuentas = Counter(cadena.lower()) > > > > va = cuentas.get('a', 0) > > > > ve = cuentas.get('e', 0) > > > > va En este caso, en cuentas tienes un contador de los distintos elementos (letras, espacios,...), no solo las vocales. La solución siempre dependerá del problema. Para este problema concreto yo usaría Counter porque me parece más elegante pero la primera opción sería igualmente válida. Si tienes que escalar la solución a documentos con millones de letras y el rendimiento es importante quizá habría que buscar otra respuesta. Si no quieres hacer imports quizá la primera solución sea más interesante (para ahorrar ms en un CLI, por ejemplo), si quieres hacer... Saludos. > > 10 > > > > > ve > > 7 > > Gracias, saludos > > El mié., 15 jul. 2020 a las 21:49, lemarchand8679 > (lemarchand8679 en gmail.com) escribió: > > > Mañana lo reviso también, muchas gracias > > Enviado desde mi smartphone Samsung Galaxy. > > -------- Mensaje original -------- > > De: Ricardo Cárdenes ricardo.cardenes en gmail.com > > Fecha: 15/7/20 21:10 (GMT-03:00) > > A: La lista de python en castellano python-es en python.org > > Asunto: Re: [Python-es] [Consulta] max() y min() > > Te voy a dar una mejor: > > > > > > > from collections import Counter > > > > > cuentas = Counter(cadena.lower()) > > > > > va = cuentas.get('a', 0) > > > > > ve = cuentas.get('e', 0) > > > > > va > > > > > 10 > > > > > > > > ve > > > > > 7 > > > > Tras ejecutar la segunda línea, cuentas es un objeto con la misma interfaz que un diccionario. > > Observa que pasé cadena.lower() a Counter, pensando que quieres todas las vocales, no sólo las minúsculas. Adáptalo según necesites. > > On Wed, Jul 15, 2020 at 11:08 AM Lemarchand Barker lemarchand8679 en gmail.com wrote: > > > > > Lo voy a buscar y voy a ver. > > > Muchas gracias > > > El mié., 15 jul. 2020 a las 18:03, Juan José Gómez Romera > > > (jjgomera en gmail.com) escribió: > > > > > > > Hola, como uso te hace la función q necesitas, yo sin embargo recortaria código usando count: > > > > va = cadena.count('a') > > > > ... > > > > Perdón por ser tan parco con el código, estoy desde móvil. > > > > El mié., 15 jul. 2020 22:28, Lemarchand Barker lemarchand8679 en gmail.com escribió: > > > > > > > > > Hola, vengo con otra pregunta tonta. > > > > > Estaba jugando con for, la típica de buscar máximos y mínimos, les > > > > > dejo el código: > > > > > lista = [] > > > > > cadena = "Esto es una cadena que contiene varias letras y muchas palabras" > > > > > vocales = ['a', 'e', 'i', 'o', 'u'] > > > > > for x in cadena: > > > > > if x == 'a': > > > > > va = va + 1 > > > > > elif x == 'e': > > > > > ve = ve + 1 > > > > > elif x == 'i': > > > > > vi = vi + 1 > > > > > elif x == 'o': > > > > > vo = vo + 1 > > > > > elif x == 'u': > > > > > vu = vu + 1 > > > > > lista.append(va) > > > > > lista.append(ve) > > > > > lista.append(vi) > > > > > lista.append(vo) > > > > > lista.append(vu) > > > > > total = va + ve + vi + vo + vu > > > > > max_item = max(lista, key=int) > > > > > min_item = min(lista, key=int) > > > > > print(f"Mayor: {max_item}") > > > > > print(f"Menor: {min_item}") > > > > > Bueno mi consulta es la siguiente, está bien que haya utilizado max y > > > > > min para tratar de buscar cuál es la vocal que más se repite y menos > > > > > se repite? Pero el tema es el siguiente hay 2 vocales que se repiten > > > > > solamente 2 veces, que son: i y o. Asumo que por el orden de los > > > > > elementos en la lista el 2 que muestra se corresponde a la i. > > > > > Bueno eso es todo, consultar si está bien utilizado el max y el min, > > > > > saludos y gracias. > > > > > > > > > > Python-es mailing list > > > > > Python-es en python.org > > > > > https://mail.python.org/mailman/listinfo/python-es > > > > > > > > Python-es mailing list > > > > Python-es en python.org > > > > https://mail.python.org/mailman/listinfo/python-es > > > > > > Python-es mailing list > > > Python-es en python.org > > > https://mail.python.org/mailman/listinfo/python-es > > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From miguelsr87 en gmail.com Sat Jul 18 04:49:40 2020 From: miguelsr87 en gmail.com (=?UTF-8?Q?Miguel_S=C3=A1nchez_Rodr=C3=ADguez?=) Date: Sat, 18 Jul 2020 10:49:40 +0200 Subject: [Python-es] =?utf-8?q?Que_libro_me_recomenda=C3=ADs?= In-Reply-To: References: Message-ID: Yo probaría este curso que publicó David Beazley hace unos meses: https://dabeaz-course.github.io/practical-python/ El sáb., 18 jul. 2020 10:38, Javier Perez escribió: > Hola, > > > Para un nivel medio de python, ¿qué libro me recomendáis? > > No tiene porque ser impreso, me valdría: PDF, web, curso. > > Es que veo mucho por internet pero suele ser un nivel inicial. > > Que siendo sinceros, todavía me queda, pero bueno, por ir un poco sobre > seguro. > > > > Saludos, > > -- > Javier Pérez > http://es.linkedin.com/in/javierperez1 > http://www.perasalvino.es/ > > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From miguelsr87 en gmail.com Sat Jul 18 04:50:35 2020 From: miguelsr87 en gmail.com (=?UTF-8?Q?Miguel_S=C3=A1nchez_Rodr=C3=ADguez?=) Date: Sat, 18 Jul 2020 10:50:35 +0200 Subject: [Python-es] =?utf-8?q?Que_libro_me_recomenda=C3=ADs?= In-Reply-To: References: Message-ID: Luego un libro fenomenal para gente que ya controla un poco de Python es el Fluent Python de Luciano Ramalho. Ojo, que para gente que acaba de empezar se puede hacer un poco duro. El sáb., 18 jul. 2020 10:49, Miguel Sánchez Rodríguez escribió: > Yo probaría este curso que publicó David Beazley hace unos meses: > https://dabeaz-course.github.io/practical-python/ > > El sáb., 18 jul. 2020 10:38, Javier Perez > escribió: > >> Hola, >> >> >> Para un nivel medio de python, ¿qué libro me recomendáis? >> >> No tiene porque ser impreso, me valdría: PDF, web, curso. >> >> Es que veo mucho por internet pero suele ser un nivel inicial. >> >> Que siendo sinceros, todavía me queda, pero bueno, por ir un poco sobre >> seguro. >> >> >> >> Saludos, >> >> -- >> Javier Pérez >> http://es.linkedin.com/in/javierperez1 >> http://www.perasalvino.es/ >> >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From msanchez en uninet.edu Sun Jul 19 17:22:20 2020 From: msanchez en uninet.edu (Miguel Sanchez) Date: Sun, 19 Jul 2020 22:22:20 +0100 Subject: [Python-es] [Consulta] Leer csv In-Reply-To: References: Message-ID: <20200719210951.2ec98abc@mariaonline.org> Hola: Ese archivo no es "utf-8 encoded". Para abrirlo con pandas usa algo como esto: pd.read_csv('SYB62_1_201907_Population_Surface_Area_and_Density.csv', sep=',', encoding="latin-1") con csv with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', encoding="latin-1",) as file: reader = csv.reader(file) for row in reader: print(row) Saludos El Sun, 19 Jul 2020 16:22:23 -0300 Lemarchand Barker dijo: > Buenas, estoy leyendo un csv, al principio no me leía, hasta que logré que > lo haga, pero el problema viene cuando lee. Me muestra el resultado y al > final me da un mensaje de error. > > El código es el siguiente: > > import csv > > # with open('SYB62_1_201907_Population_Surface_Area_and_Density.csv', > newline='') as File: > with open('population.csv', 'rt') as File: > reader = csv.reader(File) > for row in reader: > print(row) > > La salida es la siguiente: > > ['188', 'Costa Rica', '2005', 'Population mid-year estimates for females > (millions)', '2.1369', '', 'United Nations Population Division, New York, > World Population Prospects: The 2019 Revision, last accessed June 2019.'] > ['188', 'Costa Rica', '2005', 'Sex ratio (males per 100 females)', > '100.5460', '', 'United Nations Population Division, New York, World > Population Prospects: The 2019 Revision; supplemented by data from the > United Nations Statistics Division, New York, Demographic Yearbook 2015 and > Secretariat for the Pacific Community (SPC) for small countries or areas, > last accessed June 2019.'] > Traceback (most recent call last): > File "/home/raiden/Programacion/curso/ejercicios/testcsv.py", line 6, in > > for row in reader: > File "/usr/lib/python3.8/codecs.py", line 322, in decode > (result, consumed) = self._buffer_decode(data, self.errors, final) > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 6529: > invalid continuation byte > > Solo copié un fragmento de toda la salida; lo que se ve antes del > Traceback; porque es bastante extenso el texto. Otra cosa que hice fue > cambiarle el nombre, porque era muy extenso el original. > > Al abrir el archivo con la planilla de cálculo la línea 6529, es la > siguiente: > 760 Syrian Arab Republic 2010 Population aged 0 to 14 years old (percentage) > 37.3903 > > El contenido del csv se puede ver en este link (formato pdf): pdf > > El original se encuentra acá: http://data.un.org/ > El csv es desde la izquierda, la primer columna, donde dice: > - Population, surface area and density > - PDF Area and Density.pdf> | CSV > and Density.csv> Updated: 23-Jul-2019 > Perdón la ignorancia pero no se que puede ser lo que me esté generando esa > salida de Unicode. > Saludos, gracias From lemarchand8679 en gmail.com Mon Jul 20 15:34:13 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Mon, 20 Jul 2020 16:34:13 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista Message-ID: Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv y para seguir practicando, lo que estoy haciendo es lo siguiente. Definí una lista la cual la dejé vacía, y a partir del csv guardé en la lista 3 valores: Area, Population y Value. Le cambié los nombres porque eran muy largos y para tratar de evitar errores en la búsqueda luego. Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo los valores contenidos en Area y vi que los datos estaban repetidos. Por ejemplo, en mi caso soy de Argentina y el código que le corresponde a mi país es el 32 y mediante el for, recorrí la lista y vi que ese número se repite 29 veces y así con la mayoría de los países del listado. Ahora mi pregunta es la siguiente, hay alguna forma de listar los nombres de los países pero que figuren solo una vez y no las 29 o las x cantidad de veces que figuren en el listado? Porque como dije antes, Argentina tiene el número 32 pero si imprimo el listado me aparece las 29 veces que figura en el csv. Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. Muchas gracias, saludos From ricardo.cardenes en gmail.com Mon Jul 20 15:58:29 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Mon, 20 Jul 2020 09:58:29 -1000 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: References: Message-ID: No hay una respuesta única. Eso depende de tu problema en concreto. Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es *eliminar duplicados*. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote: > Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv > y para seguir practicando, lo que estoy haciendo es lo siguiente. > Definí una lista la cual la dejé vacía, y a partir del csv guardé en > la lista 3 valores: Area, Population y Value. Le cambié los nombres > porque eran muy largos y para tratar de evitar errores en la búsqueda > luego. > Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo > los valores contenidos en Area y vi que los datos estaban repetidos. > Por ejemplo, en mi caso soy de Argentina y el código que le > corresponde a mi país es el 32 y mediante el for, recorrí la lista y > vi que ese número se repite 29 veces y así con la mayoría de los > países del listado. Ahora mi pregunta es la siguiente, hay alguna > forma de listar los nombres de los países pero que figuren solo una > vez y no las 29 o las x cantidad de veces que figuren en el listado? > Porque como dije antes, Argentina tiene el número 32 pero si imprimo > el listado me aparece las 29 veces que figura en el csv. > Mi idea es por ejemplo imprimir el listado de países, pero sin la > repetición. > Muchas gracias, saludos > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Mon Jul 20 16:06:36 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Mon, 20 Jul 2020 17:06:36 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: Message-ID: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Gracias Ricardi, ahí voy.Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos.Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite.Espero haberme explicado mejor, graciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 20/7/20 16:59 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista No hay una respuesta única. Eso depende de tu problema en concreto.Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste".Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente.Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta.On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote:Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv y para seguir practicando, lo que estoy haciendo es lo siguiente. Definí una lista la cual la dejé vacía, y a partir del csv guardé en la lista 3 valores: Area, Population y Value. Le cambié los nombres porque eran muy largos y para tratar de evitar errores en la búsqueda luego. Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo los valores contenidos en Area y vi que los datos estaban repetidos. Por ejemplo, en mi caso soy de Argentina y el código que le corresponde a mi país es el 32 y mediante el for, recorrí la lista y vi que ese número se repite 29 veces y así con la mayoría de los países del listado. Ahora mi pregunta es la siguiente, hay alguna forma de listar los nombres de los países pero que figuren solo una vez y no las 29 o las x cantidad de veces que figuren en el listado? Porque como dije antes, Argentina tiene el número 32 pero si imprimo el listado me aparece las 29 veces que figura en el csv. Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. Muchas gracias, saludos _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From darioslc en protonmail.com Mon Jul 20 16:32:18 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Mon, 20 Jul 2020 20:32:18 +0000 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: No entiendo si lo que precisas es que muestre sólo los valores de los países pero sin repetición, quizás esto ayude: archivoCSV[archivoCSV.columns[0]][:].unique() donde el índice 0 indicaría la columna de países, depende dónde esté dicha columna. Por ejemplo si los países son 1, 0, 1, 2, 3, 4, 5: >>> print(leer2[leer2.columns[0]][:]) 0 1 1 0 2 1 3 2 4 3 5 4 6 5 Name: regione, dtype: int64 >>> print(leer2[leer2.columns[0]][:].unique()) [1 0 2 3 4 5] - Sent with [ProtonMail](https://protonmail.com) Secure Email. ??????? Original Message ??????? On Monday, 20 de July de 2020 17:06, lemarchand8679 wrote: > Gracias Ricardi, ahí voy. > Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. > Espero haberme explicado mejor, gracias > > Enviado desde mi smartphone Samsung Galaxy. > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 20/7/20 16:59 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > > No hay una respuesta única. Eso depende de tu problema en concreto. > > Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". > > Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. > > Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. > > On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote: > >> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv >> y para seguir practicando, lo que estoy haciendo es lo siguiente. >> Definí una lista la cual la dejé vacía, y a partir del csv guardé en >> la lista 3 valores: Area, Population y Value. Le cambié los nombres >> porque eran muy largos y para tratar de evitar errores en la búsqueda >> luego. >> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo >> los valores contenidos en Area y vi que los datos estaban repetidos. >> Por ejemplo, en mi caso soy de Argentina y el código que le >> corresponde a mi país es el 32 y mediante el for, recorrí la lista y >> vi que ese número se repite 29 veces y así con la mayoría de los >> países del listado. Ahora mi pregunta es la siguiente, hay alguna >> forma de listar los nombres de los países pero que figuren solo una >> vez y no las 29 o las x cantidad de veces que figuren en el listado? >> Porque como dije antes, Argentina tiene el número 32 pero si imprimo >> el listado me aparece las 29 veces que figura en el csv. >> Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. >> Muchas gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Mon Jul 20 16:51:07 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Mon, 20 Jul 2020 17:51:07 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: Adjunto imágen para que se entienda lo que quiero hacer y si es posible. En la imágen se ve que se repite el nombre 29 veces pero los datos no son repetidos, entonces lo que quiero hacer es, ingresar por ejemplo: Argentina y que se fije en el archivo si está el país, y en caso de que lo esté, que solo muestre el nombre 1 sola vez y no la cantidad de veces que figura en el archivo. Espero ahora si se me entienda mejor. Gracias, saludos El lun., 20 jul. 2020 a las 17:42, Darío vía Python-es () escribió: > > No entiendo si lo que precisas es que muestre sólo los valores de los países pero sin repetición, quizás esto ayude: > > archivoCSV[archivoCSV.columns[0]][:].unique() > > donde el índice 0 indicaría la columna de países, depende dónde esté dicha columna. Por ejemplo si los países son 1, 0, 1, 2, 3, 4, 5: > > >>> print(leer2[leer2.columns[0]][:]) > > 0 1 > > 1 0 > > 2 1 > > 3 2 > > 4 3 > > 5 4 > > 6 5 > > Name: regione, dtype: int64 > > > >>> print(leer2[leer2.columns[0]][:].unique()) > > [1 0 2 3 4 5] > > > - > > Sent with ProtonMail Secure Email. > > ??????? Original Message ??????? > On Monday, 20 de July de 2020 17:06, lemarchand8679 wrote: > > Gracias Ricardi, ahí voy. > Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. > Espero haberme explicado mejor, gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 20/7/20 16:59 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > > No hay una respuesta única. Eso depende de tu problema en concreto. > > Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". > > Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. > > Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. > > On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote: >> >> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv >> y para seguir practicando, lo que estoy haciendo es lo siguiente. >> Definí una lista la cual la dejé vacía, y a partir del csv guardé en >> la lista 3 valores: Area, Population y Value. Le cambié los nombres >> porque eran muy largos y para tratar de evitar errores en la búsqueda >> luego. >> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo >> los valores contenidos en Area y vi que los datos estaban repetidos. >> Por ejemplo, en mi caso soy de Argentina y el código que le >> corresponde a mi país es el 32 y mediante el for, recorrí la lista y >> vi que ese número se repite 29 veces y así con la mayoría de los >> países del listado. Ahora mi pregunta es la siguiente, hay alguna >> forma de listar los nombres de los países pero que figuren solo una >> vez y no las 29 o las x cantidad de veces que figuren en el listado? >> Porque como dije antes, Argentina tiene el número 32 pero si imprimo >> el listado me aparece las 29 veces que figura en el csv. >> Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. >> Muchas gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : arg_csv.png Tipo : image/png Tamaño : 256606 bytes Descripción: no disponible Url : From ricardo.cardenes en gmail.com Mon Jul 20 17:08:24 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Mon, 20 Jul 2020 11:08:24 -1000 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: De nuevo, depende de lo que quieras mostrar, de forma más detallada. Dices: Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv Tendrías que clarificar lo que estás imprimiendo. Por ejemplo: - ¿Sólo quieres saber si se incluyen datos del país en cuestión, pero no imprimirlos? ¡Bueno, entonces no los imprimas! Imprime sólo "sí, está", o cualquier otra cosa que tú quieras. Sólo una vez. Entiendo que estás iterando sobre la lista de datos e imprimiendo "Argentina" cada vez que aparece el código. En lugar de eso, podrías detener la búsqueda (con un break, probablemente) cuando encuentres la primera coincidencia. - ¿Quieres mostrar los datos, pero no repetir el código en cada fila? ¡No lo hagas! Muestra sólo las columnas que te interesan. Para la primera, por ejemplo, podrías incluso mantener una lista separada (o casi mejor, un set) con los códigos de los países que aparecen. Entonces comprobar si el país está incluido o no es trivial. O podrías combinar ambos puntos: usar un *diccionario*, indizado por el código del país, cuyos valores fueran listas de los datos de los respectivos países (un par valor-lista para cada código de país). Y como el dato del país ya está en el índice, no tienes que repetirlo en los datos almacenados. Eso te permitiría tener acceso inmediato a los datos exclusivos a un país. Claro que esto último sólo es útil si todas tus búsquedas van indizadas por país. No sé, como te digo, nos vas dando información poquito a poquito de lo que quieres hacer y eso deja demasiadas cosas abiertas. On Mon, Jul 20, 2020 at 10:07 AM lemarchand8679 wrote: > Gracias Ricardi, ahí voy. > Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada > fila contiene información distinta, por lo que no hay datos repetidos. > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que > no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese > país que ingresé está almacenado en el csv. No quiero modificar, borrar o > añadir algo, sólo saber si un país está o no en la lista y en caso de que > así sea, que lo muestre pero no todas las veces que se repite. > Espero haberme explicado mejor, gracias > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 20/7/20 16:59 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > > No hay una respuesta única. Eso depende de tu problema en concreto. > > Por ejemplo, dices que el número de área está repetido... ¿Significa eso > que el resto de valores también están repetidos? Es decir, ¿la fila con los > datos de Argentina aparece 29 veces? En ese caso entiendo que lo que > quieres es *eliminar duplicados*. Eso es trivial: simplemente, mantén > algún tipo de registro de los datos que vas leyendo del CSV (un set > almacenando los códigos es perfecto para esto) y no añadas a la lista las > filas que ya "viste". > > Si lo que quieres es consolidar datos (cada fila con el mismo código tiene > datos diferentes, que quieres sumar, o hacer media, o...) entonces la > respuesta va a ser diferente. > > Necesitas explicar de forma clara qué es lo que pretendes y entonces se te > puede dar una respuesta. > > On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv >> y para seguir practicando, lo que estoy haciendo es lo siguiente. >> Definí una lista la cual la dejé vacía, y a partir del csv guardé en >> la lista 3 valores: Area, Population y Value. Le cambié los nombres >> porque eran muy largos y para tratar de evitar errores en la búsqueda >> luego. >> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo >> los valores contenidos en Area y vi que los datos estaban repetidos. >> Por ejemplo, en mi caso soy de Argentina y el código que le >> corresponde a mi país es el 32 y mediante el for, recorrí la lista y >> vi que ese número se repite 29 veces y así con la mayoría de los >> países del listado. Ahora mi pregunta es la siguiente, hay alguna >> forma de listar los nombres de los países pero que figuren solo una >> vez y no las 29 o las x cantidad de veces que figuren en el listado? >> Porque como dije antes, Argentina tiene el número 32 pero si imprimo >> el listado me aparece las 29 veces que figura en el csv. >> Mi idea es por ejemplo imprimir el listado de países, pero sin la >> repetición. >> Muchas gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Mon Jul 20 17:18:31 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Mon, 20 Jul 2020 18:18:31 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: Lo del diccionario es algo que lo pensé, tendría que darle más forma a eso. A ver quiero hacer lo siguiente: lugar = input("Ingrese el nombre del país: ") Ingresa: Argentina Entonces en vez de mostrar las 29 veces que aparece el país que muestre sólo una vez, porque en este caso no me interesa ver los datos almacenados y correspondientes al país, sino sólo saber si está o no y acá me gustaría enganchar con el diccionario o no se si tiene sentido. Es decir, primero saber si el país se encuentra y si está, entonces después veo de buscar cuál es su código correspondiente y a partir de eso armar si es posible un diccionario. Espero que ahora si se haya entendido bien, sólo necesito saber si está el país, si ingreso Finlandia, saber si está o no y así con el resto de países. Gracias, saludos El lun., 20 jul. 2020 a las 18:09, Ricardo Cárdenes () escribió: > > De nuevo, depende de lo que quieras mostrar, de forma más detallada. Dices: > > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv > > > Tendrías que clarificar lo que estás imprimiendo. Por ejemplo: > > ¿Sólo quieres saber si se incluyen datos del país en cuestión, pero no imprimirlos? ¡Bueno, entonces no los imprimas! Imprime sólo "sí, está", o cualquier otra cosa que tú quieras. Sólo una vez. Entiendo que estás iterando sobre la lista de datos e imprimiendo "Argentina" cada vez que aparece el código. En lugar de eso, podrías detener la búsqueda (con un break, probablemente) cuando encuentres la primera coincidencia. > ¿Quieres mostrar los datos, pero no repetir el código en cada fila? ¡No lo hagas! Muestra sólo las columnas que te interesan. > > Para la primera, por ejemplo, podrías incluso mantener una lista separada (o casi mejor, un set) con los códigos de los países que aparecen. Entonces comprobar si el país está incluido o no es trivial. > > O podrías combinar ambos puntos: usar un diccionario, indizado por el código del país, cuyos valores fueran listas de los datos de los respectivos países (un par valor-lista para cada código de país). Y como el dato del país ya está en el índice, no tienes que repetirlo en los datos almacenados. Eso te permitiría tener acceso inmediato a los datos exclusivos a un país. > > Claro que esto último sólo es útil si todas tus búsquedas van indizadas por país. > > No sé, como te digo, nos vas dando información poquito a poquito de lo que quieres hacer y eso deja demasiadas cosas abiertas. > > On Mon, Jul 20, 2020 at 10:07 AM lemarchand8679 wrote: >> >> Gracias Ricardi, ahí voy. >> Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. >> Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. >> Espero haberme explicado mejor, gracias >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> -------- Mensaje original -------- >> De: Ricardo Cárdenes >> Fecha: 20/7/20 16:59 (GMT-03:00) >> A: La lista de python en castellano >> Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista >> >> No hay una respuesta única. Eso depende de tu problema en concreto. >> >> Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". >> >> Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. >> >> Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. >> >> On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote: >>> >>> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv >>> y para seguir practicando, lo que estoy haciendo es lo siguiente. >>> Definí una lista la cual la dejé vacía, y a partir del csv guardé en >>> la lista 3 valores: Area, Population y Value. Le cambié los nombres >>> porque eran muy largos y para tratar de evitar errores en la búsqueda >>> luego. >>> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo >>> los valores contenidos en Area y vi que los datos estaban repetidos. >>> Por ejemplo, en mi caso soy de Argentina y el código que le >>> corresponde a mi país es el 32 y mediante el for, recorrí la lista y >>> vi que ese número se repite 29 veces y así con la mayoría de los >>> países del listado. Ahora mi pregunta es la siguiente, hay alguna >>> forma de listar los nombres de los países pero que figuren solo una >>> vez y no las 29 o las x cantidad de veces que figuren en el listado? >>> Porque como dije antes, Argentina tiene el número 32 pero si imprimo >>> el listado me aparece las 29 veces que figura en el csv. >>> Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. >>> Muchas gracias, saludos >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From darioslc en protonmail.com Mon Jul 20 17:25:06 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Mon, 20 Jul 2020 21:25:06 +0000 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: <1aI8qZCuOH7asSMNNjmISMPuG5y0Q_rQKD5M0joMHtHJQesBwZ25zwrVPaGTo-od6EKqMag79B_5VVhc5m_aktKDJI3z_p7YFcE0zkElRqY=@protonmail.com> Con el ejemplo que te di antes, podés transformarlo a una lista con .tolist, eso te daría una lista con los países solamente sin las repeticiones, luego con eso se me ocurre que con un for poder recorrer esa lista y el .csv. Otra que te podría servir es reindexar el csv, para que el índice sea el de los países y ahí ya listas por país. ¿podrías mostrar alguna salida hecha con el código? - Sent with ProtonMail Secure Email. ??????? Original Message ??????? On Monday, 20 de July de 2020 17:51, Lemarchand Barker wrote: > Adjunto imágen para que se entienda lo que quiero hacer y si es > posible. En la imágen se ve que se repite el nombre 29 veces pero los > datos no son repetidos, entonces lo que quiero hacer es, ingresar por > ejemplo: Argentina y que se fije en el archivo si está el país, y en > caso de que lo esté, que solo muestre el nombre 1 sola vez y no la > cantidad de veces que figura en el archivo. > Espero ahora si se me entienda mejor. > Gracias, saludos > > El lun., 20 jul. 2020 a las 17:42, Darío vía Python-es > (python-es en python.org) escribió: > > > No entiendo si lo que precisas es que muestre sólo los valores de los países pero sin repetición, quizás esto ayude: > > archivoCSV[archivoCSV.columns[0]][:].unique() > > donde el índice 0 indicaría la columna de países, depende dónde esté dicha columna. Por ejemplo si los países son 1, 0, 1, 2, 3, 4, 5: > > > > > > > print(leer2[leer2.columns[0]][:]) > > > > 0 1 > > 1 0 > > 2 1 > > 3 2 > > 4 3 > > 5 4 > > 6 5 > > Name: regione, dtype: int64 > > > > > > > print(leer2[leer2.columns[0]][:].unique()) > > > > [1 0 2 3 4 5] > > > > - > > > > Sent with ProtonMail Secure Email. > > ??????? Original Message ??????? > > On Monday, 20 de July de 2020 17:06, lemarchand8679 lemarchand8679 en gmail.com wrote: > > Gracias Ricardi, ahí voy. > > Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. > > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. > > Espero haberme explicado mejor, gracias > > Enviado desde mi smartphone Samsung Galaxy. > > -------- Mensaje original -------- > > De: Ricardo Cárdenes ricardo.cardenes en gmail.com > > Fecha: 20/7/20 16:59 (GMT-03:00) > > A: La lista de python en castellano python-es en python.org > > Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > > No hay una respuesta única. Eso depende de tu problema en concreto. > > Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". > > Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. > > Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. > > On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker lemarchand8679 en gmail.com wrote: > > > > > Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv > > > y para seguir practicando, lo que estoy haciendo es lo siguiente. > > > Definí una lista la cual la dejé vacía, y a partir del csv guardé en > > > la lista 3 valores: Area, Population y Value. Le cambié los nombres > > > porque eran muy largos y para tratar de evitar errores en la búsqueda > > > luego. > > > Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo > > > los valores contenidos en Area y vi que los datos estaban repetidos. > > > Por ejemplo, en mi caso soy de Argentina y el código que le > > > corresponde a mi país es el 32 y mediante el for, recorrí la lista y > > > vi que ese número se repite 29 veces y así con la mayoría de los > > > países del listado. Ahora mi pregunta es la siguiente, hay alguna > > > forma de listar los nombres de los países pero que figuren solo una > > > vez y no las 29 o las x cantidad de veces que figuren en el listado? > > > Porque como dije antes, Argentina tiene el número 32 pero si imprimo > > > el listado me aparece las 29 veces que figura en el csv. > > > Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. > > > Muchas gracias, saludos > > > > > > Python-es mailing list > > > Python-es en python.org > > > https://mail.python.org/mailman/listinfo/python-es > > > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es From lemarchand8679 en gmail.com Mon Jul 20 17:34:31 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Mon, 20 Jul 2020 18:34:31 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: <1aI8qZCuOH7asSMNNjmISMPuG5y0Q_rQKD5M0joMHtHJQesBwZ25zwrVPaGTo-od6EKqMag79B_5VVhc5m_aktKDJI3z_p7YFcE0zkElRqY=@protonmail.com> References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> <1aI8qZCuOH7asSMNNjmISMPuG5y0Q_rQKD5M0joMHtHJQesBwZ25zwrVPaGTo-od6EKqMag79B_5VVhc5m_aktKDJI3z_p7YFcE0zkElRqY=@protonmail.com> Message-ID: A ver, acá va: lugar = input("Ingrese el lugar que desea buscar: ") cont = 0 for l in lista_datos[1]: if l == lugar: cont = cont + 1 if cont == 0: print(f"La palabra que {lugar} no aparece en la lista.") elif cont != 0: print(f"La palabra {lugar} aparece en la lista {cont} veces.") Esto me da como salida: /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/testcsv.py Ingrese el lugar que desea buscar: Argentina La palabra Argentina aparece en la lista 29 veces. El lun., 20 jul. 2020 a las 18:26, Darío vía Python-es () escribió: > > Con el ejemplo que te di antes, podés transformarlo a una lista con .tolist, eso te daría una lista con los países solamente sin las repeticiones, luego con eso se me ocurre que con un for poder recorrer esa lista y el .csv. > > Otra que te podría servir es reindexar el csv, para que el índice sea el de los países y ahí ya listas por país. > > ¿podrías mostrar alguna salida hecha con el código? > > > - > > Sent with ProtonMail Secure Email. > > ??????? Original Message ??????? > On Monday, 20 de July de 2020 17:51, Lemarchand Barker wrote: > > > Adjunto imágen para que se entienda lo que quiero hacer y si es > > posible. En la imágen se ve que se repite el nombre 29 veces pero los > > datos no son repetidos, entonces lo que quiero hacer es, ingresar por > > ejemplo: Argentina y que se fije en el archivo si está el país, y en > > caso de que lo esté, que solo muestre el nombre 1 sola vez y no la > > cantidad de veces que figura en el archivo. > > Espero ahora si se me entienda mejor. > > Gracias, saludos > > > > El lun., 20 jul. 2020 a las 17:42, Darío vía Python-es > > (python-es en python.org) escribió: > > > > > No entiendo si lo que precisas es que muestre sólo los valores de los países pero sin repetición, quizás esto ayude: > > > archivoCSV[archivoCSV.columns[0]][:].unique() > > > donde el índice 0 indicaría la columna de países, depende dónde esté dicha columna. Por ejemplo si los países son 1, 0, 1, 2, 3, 4, 5: > > > > > > > > > print(leer2[leer2.columns[0]][:]) > > > > > > 0 1 > > > 1 0 > > > 2 1 > > > 3 2 > > > 4 3 > > > 5 4 > > > 6 5 > > > Name: regione, dtype: int64 > > > > > > > > > print(leer2[leer2.columns[0]][:].unique()) > > > > > > [1 0 2 3 4 5] > > > > > > - > > > > > > Sent with ProtonMail Secure Email. > > > ??????? Original Message ??????? > > > On Monday, 20 de July de 2020 17:06, lemarchand8679 lemarchand8679 en gmail.com wrote: > > > Gracias Ricardi, ahí voy. > > > Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. > > > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. > > > Espero haberme explicado mejor, gracias > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > > > De: Ricardo Cárdenes ricardo.cardenes en gmail.com > > > Fecha: 20/7/20 16:59 (GMT-03:00) > > > A: La lista de python en castellano python-es en python.org > > > Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > > > No hay una respuesta única. Eso depende de tu problema en concreto. > > > Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". > > > Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. > > > Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. > > > On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker lemarchand8679 en gmail.com wrote: > > > > > > > Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv > > > > y para seguir practicando, lo que estoy haciendo es lo siguiente. > > > > Definí una lista la cual la dejé vacía, y a partir del csv guardé en > > > > la lista 3 valores: Area, Population y Value. Le cambié los nombres > > > > porque eran muy largos y para tratar de evitar errores en la búsqueda > > > > luego. > > > > Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo > > > > los valores contenidos en Area y vi que los datos estaban repetidos. > > > > Por ejemplo, en mi caso soy de Argentina y el código que le > > > > corresponde a mi país es el 32 y mediante el for, recorrí la lista y > > > > vi que ese número se repite 29 veces y así con la mayoría de los > > > > países del listado. Ahora mi pregunta es la siguiente, hay alguna > > > > forma de listar los nombres de los países pero que figuren solo una > > > > vez y no las 29 o las x cantidad de veces que figuren en el listado? > > > > Porque como dije antes, Argentina tiene el número 32 pero si imprimo > > > > el listado me aparece las 29 veces que figura en el csv. > > > > Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. > > > > Muchas gracias, saludos > > > > > > > > Python-es mailing list > > > > Python-es en python.org > > > > https://mail.python.org/mailman/listinfo/python-es > > > > > > Python-es mailing list > > > Python-es en python.org > > > https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From ricardo.cardenes en gmail.com Mon Jul 20 17:39:44 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Mon, 20 Jul 2020 11:39:44 -1000 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: References: <5f15f952.1c69fb81.3e321.33f8@mx.google.com> Message-ID: Bueno, entonces puedes seguir las indicaciones que te dejé para ese caso concreto (o algo similar). On Mon, Jul 20, 2020 at 11:19 AM Lemarchand Barker wrote: > Lo del diccionario es algo que lo pensé, tendría que darle más forma a eso. > A ver quiero hacer lo siguiente: > > lugar = input("Ingrese el nombre del país: ") > Ingresa: Argentina > > Entonces en vez de mostrar las 29 veces que aparece el país que > muestre sólo una vez, porque en este caso no me interesa ver los datos > almacenados y correspondientes al país, sino sólo saber si está o no y > acá me gustaría enganchar con el diccionario o no se si tiene sentido. > Es decir, primero saber si el país se encuentra y si está, entonces > después veo de buscar cuál es su código correspondiente y a partir de > eso armar si es posible un diccionario. > Espero que ahora si se haya entendido bien, sólo necesito saber si > está el país, si ingreso Finlandia, saber si está o no y así con el > resto de países. > Gracias, saludos > > El lun., 20 jul. 2020 a las 18:09, Ricardo Cárdenes > () escribió: > > > > De nuevo, depende de lo que quieras mostrar, de forma más detallada. > Dices: > > > > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que > no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese > país que ingresé está almacenado en el csv > > > > > > Tendrías que clarificar lo que estás imprimiendo. Por ejemplo: > > > > ¿Sólo quieres saber si se incluyen datos del país en cuestión, pero no > imprimirlos? ¡Bueno, entonces no los imprimas! Imprime sólo "sí, está", o > cualquier otra cosa que tú quieras. Sólo una vez. Entiendo que estás > iterando sobre la lista de datos e imprimiendo "Argentina" cada vez que > aparece el código. En lugar de eso, podrías detener la búsqueda (con un > break, probablemente) cuando encuentres la primera coincidencia. > > ¿Quieres mostrar los datos, pero no repetir el código en cada fila? ¡No > lo hagas! Muestra sólo las columnas que te interesan. > > > > Para la primera, por ejemplo, podrías incluso mantener una lista > separada (o casi mejor, un set) con los códigos de los países que aparecen. > Entonces comprobar si el país está incluido o no es trivial. > > > > O podrías combinar ambos puntos: usar un diccionario, indizado por el > código del país, cuyos valores fueran listas de los datos de los > respectivos países (un par valor-lista para cada código de país). Y como el > dato del país ya está en el índice, no tienes que repetirlo en los datos > almacenados. Eso te permitiría tener acceso inmediato a los datos > exclusivos a un país. > > > > Claro que esto último sólo es útil si todas tus búsquedas van indizadas > por país. > > > > No sé, como te digo, nos vas dando información poquito a poquito de lo > que quieres hacer y eso deja demasiadas cosas abiertas. > > > > On Mon, Jul 20, 2020 at 10:07 AM lemarchand8679 < > lemarchand8679 en gmail.com> wrote: > >> > >> Gracias Ricardi, ahí voy. > >> Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada > fila contiene información distinta, por lo que no hay datos repetidos. > >> Entonces lo que quiero hacer es, ingresar el nombre de un país, pero > que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si > ese país que ingresé está almacenado en el csv. No quiero modificar, borrar > o añadir algo, sólo saber si un país está o no en la lista y en caso de que > así sea, que lo muestre pero no todas las veces que se repite. > >> Espero haberme explicado mejor, gracias > >> > >> > >> > >> Enviado desde mi smartphone Samsung Galaxy. > >> > >> > >> -------- Mensaje original -------- > >> De: Ricardo Cárdenes > >> Fecha: 20/7/20 16:59 (GMT-03:00) > >> A: La lista de python en castellano > >> Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista > >> > >> No hay una respuesta única. Eso depende de tu problema en concreto. > >> > >> Por ejemplo, dices que el número de área está repetido... ¿Significa > eso que el resto de valores también están repetidos? Es decir, ¿la fila con > los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que > quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún > tipo de registro de los datos que vas leyendo del CSV (un set almacenando > los códigos es perfecto para esto) y no añadas a la lista las filas que ya > "viste". > >> > >> Si lo que quieres es consolidar datos (cada fila con el mismo código > tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la > respuesta va a ser diferente. > >> > >> Necesitas explicar de forma clara qué es lo que pretendes y entonces se > te puede dar una respuesta. > >> > >> On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >>> > >>> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv > >>> y para seguir practicando, lo que estoy haciendo es lo siguiente. > >>> Definí una lista la cual la dejé vacía, y a partir del csv guardé en > >>> la lista 3 valores: Area, Population y Value. Le cambié los nombres > >>> porque eran muy largos y para tratar de evitar errores en la búsqueda > >>> luego. > >>> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo > >>> los valores contenidos en Area y vi que los datos estaban repetidos. > >>> Por ejemplo, en mi caso soy de Argentina y el código que le > >>> corresponde a mi país es el 32 y mediante el for, recorrí la lista y > >>> vi que ese número se repite 29 veces y así con la mayoría de los > >>> países del listado. Ahora mi pregunta es la siguiente, hay alguna > >>> forma de listar los nombres de los países pero que figuren solo una > >>> vez y no las 29 o las x cantidad de veces que figuren en el listado? > >>> Porque como dije antes, Argentina tiene el número 32 pero si imprimo > >>> el listado me aparece las 29 veces que figura en el csv. > >>> Mi idea es por ejemplo imprimir el listado de países, pero sin la > repetición. > >>> Muchas gracias, saludos > >>> _______________________________________________ > >>> Python-es mailing list > >>> Python-es en python.org > >>> https://mail.python.org/mailman/listinfo/python-es > >> > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Mon Jul 20 17:44:00 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Mon, 20 Jul 2020 18:44:00 -0300 Subject: [Python-es] [Consulta] Ordenar elementos de una lista In-Reply-To: Message-ID: <5f161026.1c69fb81.ff3b7.50b6@mx.google.com> De lujo, ahora lo voy a probar, muchas graciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 20/7/20 18:41 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista Bueno, entonces puedes seguir las indicaciones que te dejé para ese caso concreto (o algo similar).On Mon, Jul 20, 2020 at 11:19 AM Lemarchand Barker wrote:Lo del diccionario es algo que lo pensé, tendría que darle más forma a eso. A ver quiero hacer lo siguiente: lugar = input("Ingrese el nombre del país: ") Ingresa: Argentina Entonces en vez de mostrar las 29 veces que aparece el país que muestre sólo una vez, porque en este caso no me interesa ver los datos almacenados y correspondientes al país, sino sólo saber si está o no y acá me gustaría enganchar con el diccionario o no se si tiene sentido. Es decir, primero saber si el país se encuentra y si está, entonces después veo de buscar cuál es su código correspondiente y a partir de eso armar si es posible un diccionario. Espero que ahora si se haya entendido bien, sólo necesito saber si está el país, si ingreso Finlandia, saber si está o no y así con el resto de países. Gracias, saludos El lun., 20 jul. 2020 a las 18:09, Ricardo Cárdenes () escribió: > > De nuevo, depende de lo que quieras mostrar, de forma más detallada. Dices: > > Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv > > > Tendrías que clarificar lo que estás imprimiendo. Por ejemplo: > > ¿Sólo quieres saber si se incluyen datos del país en cuestión, pero no imprimirlos? ¡Bueno, entonces no los imprimas! Imprime sólo "sí, está", o cualquier otra cosa que tú quieras. Sólo una vez. Entiendo que estás iterando sobre la lista de datos e imprimiendo "Argentina" cada vez que aparece el código. En lugar de eso, podrías detener la búsqueda (con un break, probablemente) cuando encuentres la primera coincidencia. > ¿Quieres mostrar los datos, pero no repetir el código en cada fila? ¡No lo hagas! Muestra sólo las columnas que te interesan. > > Para la primera, por ejemplo, podrías incluso mantener una lista separada (o casi mejor, un set) con los códigos de los países que aparecen. Entonces comprobar si el país está incluido o no es trivial. > > O podrías combinar ambos puntos: usar un diccionario, indizado por el código del país, cuyos valores fueran listas de los datos de los respectivos países (un par valor-lista para cada código de país). Y como el dato del país ya está en el índice, no tienes que repetirlo en los datos almacenados. Eso te permitiría tener acceso inmediato a los datos exclusivos a un país. > > Claro que esto último sólo es útil si todas tus búsquedas van indizadas por país. > > No sé, como te digo, nos vas dando información poquito a poquito de lo que quieres hacer y eso deja demasiadas cosas abiertas. > > On Mon, Jul 20, 2020 at 10:07 AM lemarchand8679 wrote: >> >> Gracias Ricardi, ahí voy. >> Argentina y la mayoría de los lugares se repite 29 veces (filas). Cada fila contiene información distinta, por lo que no hay datos repetidos. >> Entonces lo que quiero hacer es, ingresar el nombre de un país, pero que no lo imprima por pantalla las 29 veces que aparece, sino solo saber si ese país que ingresé está almacenado en el csv. No quiero modificar, borrar o añadir algo, sólo saber si un país está o no en la lista y en caso de que así sea, que lo muestre pero no todas las veces que se repite. >> Espero haberme explicado mejor, gracias >> >> >> >> Enviado desde mi smartphone Samsung Galaxy. >> >> >> -------- Mensaje original -------- >> De: Ricardo Cárdenes >> Fecha: 20/7/20 16:59 (GMT-03:00) >> A: La lista de python en castellano >> Asunto: Re: [Python-es] [Consulta] Ordenar elementos de una lista >> >> No hay una respuesta única. Eso depende de tu problema en concreto. >> >> Por ejemplo, dices que el número de área está repetido... ¿Significa eso que el resto de valores también están repetidos? Es decir, ¿la fila con los datos de Argentina aparece 29 veces? En ese caso entiendo que lo que quieres es eliminar duplicados. Eso es trivial: simplemente, mantén algún tipo de registro de los datos que vas leyendo del CSV (un set almacenando los códigos es perfecto para esto) y no añadas a la lista las filas que ya "viste". >> >> Si lo que quieres es consolidar datos (cada fila con el mismo código tiene datos diferentes, que quieres sumar, o hacer media, o...) entonces la respuesta va a ser diferente. >> >> Necesitas explicar de forma clara qué es lo que pretendes y entonces se te puede dar una respuesta. >> >> On Mon, Jul 20, 2020 at 9:36 AM Lemarchand Barker wrote: >>> >>> Hola, esta vez mi pregunta es más simple, sigo jugando el archivo csv >>> y para seguir practicando, lo que estoy haciendo es lo siguiente. >>> Definí una lista la cual la dejé vacía, y a partir del csv guardé en >>> la lista 3 valores: Area, Population y Value. Le cambié los nombres >>> porque eran muy largos y para tratar de evitar errores en la búsqueda >>> luego. >>> Una vez añadidos estos 3 datos a la lista, los imprimía por ejemplo >>> los valores contenidos en Area y vi que los datos estaban repetidos. >>> Por ejemplo, en mi caso soy de Argentina y el código que le >>> corresponde a mi país es el 32 y mediante el for, recorrí la lista y >>> vi que ese número se repite 29 veces y así con la mayoría de los >>> países del listado. Ahora mi pregunta es la siguiente, hay alguna >>> forma de listar los nombres de los países pero que figuren solo una >>> vez y no las 29 o las x cantidad de veces que figuren en el listado? >>> Porque como dije antes, Argentina tiene el número 32 pero si imprimo >>> el listado me aparece las 29 veces que figura en el csv. >>> Mi idea es por ejemplo imprimir el listado de países, pero sin la repetición. >>> Muchas gracias, saludos >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From facturasxebolax en gmail.com Tue Jul 21 03:11:04 2020 From: facturasxebolax en gmail.com (=?UTF-8?Q?H=c3=a9ctor_J=2e_Ben=c3=adtez_Corredera?=) Date: Tue, 21 Jul 2020 09:11:04 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython Message-ID: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> Buenos días. Me gustaría pedir ayuda con algo que por más que busco y le doy vueltas no consigo hacer. Posiblemente sea fácil la solución pero estoy ofuscado y no doy con la vuelta. Bien en wxpython tengo una ventana de dialogo la cual deseo que se cierre tanto con un botón dedicado a ello como pulsando escape. Para ello tengo esto:         self.closeBTN = wx.Button(Panel, wx.ID_ANY, _("&Close")) self.Bind(wx.EVT_BUTTON, self.onClose, self.closeBTN)         self.Bind(wx.EVT_CHAR_HOOK, self.onEsc) def onEsc(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: ConfigFileSave() self.Destroy() else: event.Skip() def onClose(self, event): ConfigFileSave() self.Destroy() Bien esto funciona perfectamente, pero ahora mis preguntas. 1º Seria posible tener ligado las dos acciones a un solo def, algo a si: Def onPrueba(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: ConfigFileSave() self.Destroy() elif >capturar el evento del botón al ser pulsado< == >saber cuando fue pulsado el botón<: ConfigFileSave() self.Destroy() else: event.Skip() El planteamiento anterior lo conseguiría si no me equivoco definiendo los eventos a si: self.Bind(wx.EVT_BUTTON, self.onPrueba, self.closeBTN) self.closeBTN.Bind(wx.EVT_CHAR_HOOK, self.onPrueba) 2º Hay alguna otra manera de hacer lo que pretendo? Espero haberme explicado y muchas gracias de antemano. Cordiales saludos ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From perysoy en gmail.com Tue Jul 21 06:27:18 2020 From: perysoy en gmail.com (PeRy) Date: Tue, 21 Jul 2020 12:27:18 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython In-Reply-To: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> References: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> Message-ID: Hola compañero, si es un *wx.Dialog* se haría muy fácilmente con un wx.ID_CANCEL en el id del boton Salir de esta manera: Cuando presionaas ESCAPE, wx buscaria el ID wx.CANCEL y en caso de que existiera enviaria wx.EVT_BUTTON al boton con esa id (wx.ID_CANCEL). ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From facturasxebolax en gmail.com Tue Jul 21 06:54:18 2020 From: facturasxebolax en gmail.com (=?UTF-8?Q?H=c3=a9ctor_J=2e_Ben=c3=adtez_Corredera?=) Date: Tue, 21 Jul 2020 12:54:18 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython In-Reply-To: References: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> Message-ID: <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> Buenas, lo primero gracias por contestar. Pero culpa mía al no comentar que es una clase construida desde cero como una ventana de dialogo. Bien dicho dialogo no es predefinido de los que trae wxpython por lo que tiene un botón cerrar y más cosas. Mi intención es contener tanto la llamada al Escape como la llamada al botón en la misma definición. Es un poco raro por que como lo tengo cada llamada a su definición funciona todo perfectamente pero por motivos necesarios a quien va dirigido el proyecto es necesario que este en la misma definición. Lo que no entiendo es capturar el evento de botón pulsado y al igual que con evento.GetCode() capturo la tecla algo parecido para cuando sea pulsado el botón. Saludos y gracias otra vez. El 21/07/2020 a las 12:27, PeRy escribió: > Hola compañero, si es un *wx.Dialog* se haría muy fácilmente con un > wx.ID_CANCEL en el id del boton Salir de esta manera: Cuando > presionaas ESCAPE, wx buscaria el ID wx.CANCEL y en caso de que > existiera enviaria wx.EVT_BUTTON al boton con esa id (wx.ID_CANCEL). > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From perysoy en gmail.com Tue Jul 21 07:15:14 2020 From: perysoy en gmail.com (PeRy) Date: Tue, 21 Jul 2020 13:15:14 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython In-Reply-To: <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> References: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> Message-ID: mmmm mira ver si te puede valer lo siguiente: import wx class Test(wx.Frame): def __init__(self): super().__init__(None, -1, title='Event Test', size=(200, 200)) panel = wx.Panel(self) btnSalir = wx.Button(panel, wx.ID_CANCEL, 'salir') btnSalir.Bind(wx.EVT_BUTTON, self.OnKeyUP) self.Bind(wx.EVT_CLOSE, self.onExit) # panel.SetFocus() self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyUP) def OnKeyUP(self, event): if event.GetEventType() == 10012: # 10012 wx.EVT_BUTTON; 10055-> wx.EVT_CHAT_HOOK self.close() else: print("KEY UP!") keyCode = event.GetKeyCode() if keyCode == wx.WXK_ESCAPE: self.Destroy() event.Skip() def onExit(self, event): print('onExit') self.Destroy() class App(wx.App): """Application class.""" def OnInit(self): self.frame = Test() self.frame.Show() self.SetTopWindow(self.frame) return True if __name__ == '__main__': app = App() app.MainLoop() El mar., 21 jul. 2020 a las 12:54, Héctor J. Benítez Corredera (< facturasxebolax en gmail.com>) escribió: > Buenas, lo primero gracias por contestar. > > > > Pero culpa mía al no comentar que es una clase construida desde cero como > una ventana de dialogo. > > > > Bien dicho dialogo no es predefinido de los que trae wxpython por lo que > tiene un botón cerrar y más cosas. > > > > Mi intención es contener tanto la llamada al Escape como la llamada al > botón en la misma definición. > > > > Es un poco raro por que como lo tengo cada llamada a su definición > funciona todo perfectamente pero por motivos necesarios a quien va dirigido > el proyecto es necesario que este en la misma definición. > > > > Lo que no entiendo es capturar el evento de botón pulsado y al igual que > con evento.GetCode() capturo la tecla algo parecido para cuando sea pulsado > el botón. > > > > > > Saludos y gracias otra vez. > > El 21/07/2020 a las 12:27, PeRy escribió: > > Hola compañero, si es un *wx.Dialog* se haría muy fácilmente con un > wx.ID_CANCEL en el id del boton Salir de esta manera: Cuando > presionaas ESCAPE, wx buscaria el ID wx.CANCEL y en caso de que existiera > enviaria wx.EVT_BUTTON al boton con esa id (wx.ID_CANCEL). > > > _______________________________________________ > Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From perysoy en gmail.com Tue Jul 21 07:17:29 2020 From: perysoy en gmail.com (PeRy) Date: Tue, 21 Jul 2020 13:17:29 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython In-Reply-To: <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> References: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> Message-ID: A ver... que me equivoque antes en el primer if: def OnKeyUP(self, event): if event.GetEventType() == 10012: # 10012 wx.EVT_BUTTON; 10055-> wx.EVT_CHAT_HOOK self.Destroy() # Tenia self.close() El mar., 21 jul. 2020 a las 12:54, Héctor J. Benítez Corredera (< facturasxebolax en gmail.com>) escribió: > Buenas, lo primero gracias por contestar. > > > > Pero culpa mía al no comentar que es una clase construida desde cero como > una ventana de dialogo. > > > > Bien dicho dialogo no es predefinido de los que trae wxpython por lo que > tiene un botón cerrar y más cosas. > > > > Mi intención es contener tanto la llamada al Escape como la llamada al > botón en la misma definición. > > > > Es un poco raro por que como lo tengo cada llamada a su definición > funciona todo perfectamente pero por motivos necesarios a quien va dirigido > el proyecto es necesario que este en la misma definición. > > > > Lo que no entiendo es capturar el evento de botón pulsado y al igual que > con evento.GetCode() capturo la tecla algo parecido para cuando sea pulsado > el botón. > > > > > > Saludos y gracias otra vez. > > El 21/07/2020 a las 12:27, PeRy escribió: > > Hola compañero, si es un *wx.Dialog* se haría muy fácilmente con un > wx.ID_CANCEL en el id del boton Salir de esta manera: Cuando > presionaas ESCAPE, wx buscaria el ID wx.CANCEL y en caso de que existiera > enviaria wx.EVT_BUTTON al boton con esa id (wx.ID_CANCEL). > > > _______________________________________________ > Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From facturasxebolax en gmail.com Tue Jul 21 07:56:50 2020 From: facturasxebolax en gmail.com (=?UTF-8?Q?H=c3=a9ctor_J=2e_Ben=c3=adtez_Corredera?=) Date: Tue, 21 Jul 2020 13:56:50 +0200 Subject: [Python-es] Ayuda con la manera de salir de un dialogo de wxpython In-Reply-To: References: <60f0ad2f-fa20-f240-760b-c6574759bdb0@gmail.com> <0d5007c8-a2f8-2015-34f3-e87a84300c09@gmail.com> Message-ID: <73c69649-4c88-8892-4178-d9a39e2de436@gmail.com> Buenas, no puede. Si no que es lo que estaba buscando. Muchísimas gracias funcionando perfectamente. Cordiales saludos El 21/07/2020 a las 13:17, PeRy escribió: > A ver... que me equivoque antes en el primer if: > def OnKeyUP(self, event): > if event.GetEventType() == 10012: > # 10012 wx.EVT_BUTTON; 10055-> wx.EVT_CHAT_HOOK > self.Destroy() # Tenia self.close() > > El mar., 21 jul. 2020 a las 12:54, Héctor J. Benítez Corredera > (>) escribió: > > Buenas, lo primero gracias por contestar. > > Pero culpa mía al no comentar que es una clase construida desde > cero como una ventana de dialogo. > > Bien dicho dialogo no es predefinido de los que trae wxpython por > lo que tiene un botón cerrar y más cosas. > > Mi intención es contener tanto la llamada al Escape como la > llamada al botón en la misma definición. > > Es un poco raro por que como lo tengo cada llamada a su definición > funciona todo perfectamente pero por motivos necesarios a quien va > dirigido el proyecto es necesario que este en la misma definición. > > Lo que no entiendo es capturar el evento de botón pulsado y al > igual que con evento.GetCode() capturo la tecla algo parecido para > cuando sea pulsado el botón. > > Saludos y gracias otra vez. > > El 21/07/2020 a las 12:27, PeRy escribió: >> Hola compañero, si es un *wx.Dialog* se haría muy fácilmente con >> un wx.ID_CANCEL en el id del boton Salir de esta manera: Cuando >> presionaas ESCAPE, wx buscaria el ID wx.CANCEL y en caso de que >> existiera enviaria wx.EVT_BUTTON al boton con esa id (wx.ID_CANCEL). >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Tue Jul 21 17:36:36 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Tue, 21 Jul 2020 18:36:36 -0300 Subject: [Python-es] [Consulta] Caracter raro en .csv Message-ID: Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el caracter que reemplaza una letra, el laboratorio se llama Andrómaco (chileno), si lo busco tal cual me figura que no está en lista: /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py Ingrese nombre del laboratorio: Andrómaco El laboratorio Andrómaco no figura en lista. Si lo busco sin acento, el resultado es el mismo, también pensé en buscar por partes, es decir que en lugar de que busque por el nombre completo: Andrómaco que busque por las 3 primeras letras: And. Esto todavía no lo hice porque esa parte la quiero practicar después. Ahora la duda es la siguiente, hay alguna forma de buscar por el nombre completo del laboratorio; tal cual lo estoy haciendo; y tratar de solucionar el Andr?maco? Muchas gracias, saludos ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : lab.png Tipo : image/png Tamaño : 5655 bytes Descripción: no disponible Url : From ricardo.cardenes en gmail.com Tue Jul 21 17:40:50 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Tue, 21 Jul 2020 11:40:50 -1000 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: Message-ID: El problema es que estás leyendo el fichero asumiendo una cierta codificación (casi seguramente UTF-8, por defecto), mientras que el fichero realmente contiene otra (probablemente "latin-1"). Ambas codificaciones coinciden sólo en caracteres con valor ASCII < 128. Prueba a abrir el fichero así: open(nombre_del_fichero, encoding='latin-1') On Tue, Jul 21, 2020 at 11:37 AM Lemarchand Barker wrote: > Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo > perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. > Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el > caracter que reemplaza una letra, el laboratorio se llama Andrómaco > (chileno), si lo busco tal cual me figura que no está en lista: > > /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py > Ingrese nombre del laboratorio: Andrómaco > El laboratorio Andrómaco no figura en lista. > > Si lo busco sin acento, el resultado es el mismo, también pensé en > buscar por partes, es decir que en lugar de que busque por el nombre > completo: Andrómaco que busque por las 3 primeras letras: And. Esto > todavía no lo hice porque esa parte la quiero practicar después. Ahora > la duda es la siguiente, hay alguna forma de buscar por el nombre > completo del laboratorio; tal cual lo estoy haciendo; y tratar de > solucionar el Andr?maco? > > Muchas gracias, saludos > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Tue Jul 21 17:45:11 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Tue, 21 Jul 2020 18:45:11 -0300 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: Message-ID: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Estaba hablando con un compañero y me acaba de decir lo mismo.Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable?GraciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 21/7/20 18:42 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Caracter raro en .csv El problema es que estás leyendo el fichero asumiendo una cierta codificación (casi seguramente UTF-8, por defecto), mientras que el fichero realmente contiene otra (probablemente "latin-1").Ambas codificaciones coinciden sólo en caracteres con valor ASCII < 128.Prueba a abrir el fichero así: open(nombre_del_fichero, encoding='latin-1')On Tue, Jul 21, 2020 at 11:37 AM Lemarchand Barker wrote:Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el caracter que reemplaza una letra, el laboratorio se llama Andrómaco (chileno), si lo busco tal cual me figura que no está en lista: /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py Ingrese nombre del laboratorio: Andrómaco El laboratorio Andrómaco no figura en lista. Si lo busco sin acento, el resultado es el mismo, también pensé en buscar por partes, es decir que en lugar de que busque por el nombre completo: Andrómaco que busque por las 3 primeras letras: And. Esto todavía no lo hice porque esa parte la quiero practicar después. Ahora la duda es la siguiente, hay alguna forma de buscar por el nombre completo del laboratorio; tal cual lo estoy haciendo; y tratar de solucionar el Andr?maco? Muchas gracias, saludos _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From darioslc en protonmail.com Tue Jul 21 18:01:03 2020 From: darioslc en protonmail.com (=?utf-8?Q?Dar=C3=ADo?=) Date: Tue, 21 Jul 2020 22:01:03 +0000 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: > Estaba hablando con un compañero y me acaba de decir lo mismo. > Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? > Gracias Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo # -*- coding: utf-8 -*- al inicio del guión. > Enviado desde mi smartphone Samsung Galaxy. > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 21/7/20 18:42 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Caracter raro en .csv > > El problema es que estás leyendo el fichero asumiendo una cierta codificación (casi seguramente UTF-8, por defecto), mientras que el fichero realmente contiene otra (probablemente "latin-1"). > > Ambas codificaciones coinciden sólo en caracteres con valor ASCII < 128. > > Prueba a abrir el fichero así: open(nombre_del_fichero, encoding='latin-1') > > On Tue, Jul 21, 2020 at 11:37 AM Lemarchand Barker wrote: > >> Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo >> perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. >> Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el >> caracter que reemplaza una letra, el laboratorio se llama Andrómaco >> (chileno), si lo busco tal cual me figura que no está en lista: >> >> /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py >> Ingrese nombre del laboratorio: Andrómaco >> El laboratorio Andrómaco no figura en lista. >> >> Si lo busco sin acento, el resultado es el mismo, también pensé en >> buscar por partes, es decir que en lugar de que busque por el nombre >> completo: Andrómaco que busque por las 3 primeras letras: And. Esto >> todavía no lo hice porque esa parte la quiero practicar después. Ahora >> la duda es la siguiente, hay alguna forma de buscar por el nombre >> completo del laboratorio; tal cual lo estoy haciendo; y tratar de >> solucionar el Andr?maco? >> >> Muchas gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Tue Jul 21 18:20:45 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Tue, 21 Jul 2020 19:20:45 -0300 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: Entonces supongo que el archivo lo generaron usando win, mi compañero me dijo prácticamente lo mismo que Ricardo, que sea latin. Me dijo que con Libreoffice; que es lo que uso; que lo puedo ir cambiando la opción "conjunto de caracteres" hasta que no haya caracteres raros. Gracias :) El mar., 21 jul. 2020 a las 19:02, Darío vía Python-es () escribió: > > > Estaba hablando con un compañero y me acaba de decir lo mismo. > Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? > Gracias > > > Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo > > # -*- coding: utf-8 -*- > > al inicio del guión. > > > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Ricardo Cárdenes > Fecha: 21/7/20 18:42 (GMT-03:00) > A: La lista de python en castellano > Asunto: Re: [Python-es] [Consulta] Caracter raro en .csv > > El problema es que estás leyendo el fichero asumiendo una cierta codificación (casi seguramente UTF-8, por defecto), mientras que el fichero realmente contiene otra (probablemente "latin-1"). > > Ambas codificaciones coinciden sólo en caracteres con valor ASCII < 128. > > Prueba a abrir el fichero así: open(nombre_del_fichero, encoding='latin-1') > > On Tue, Jul 21, 2020 at 11:37 AM Lemarchand Barker wrote: >> >> Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo >> perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. >> Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el >> caracter que reemplaza una letra, el laboratorio se llama Andrómaco >> (chileno), si lo busco tal cual me figura que no está en lista: >> >> /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py >> Ingrese nombre del laboratorio: Andrómaco >> El laboratorio Andrómaco no figura en lista. >> >> Si lo busco sin acento, el resultado es el mismo, también pensé en >> buscar por partes, es decir que en lugar de que busque por el nombre >> completo: Andrómaco que busque por las 3 primeras letras: And. Esto >> todavía no lo hice porque esa parte la quiero practicar después. Ahora >> la duda es la siguiente, hay alguna forma de buscar por el nombre >> completo del laboratorio; tal cual lo estoy haciendo; y tratar de >> solucionar el Andr?maco? >> >> Muchas gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From ricardo.cardenes en gmail.com Tue Jul 21 19:03:33 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Tue, 21 Jul 2020 13:03:33 -1000 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: Ten en cuenta que va a dar igual la codificación del fichero: una vez lo leas (si lo haces correctamente), lo más probable es que Python vaya a representarlo internamente de otra manera. De hecho, en Python 3 todas las cadenas son unicode. Pero claro, si conviertes el fichero antes de ser leído, te ahorras tener que añadir código que tenga que lidiar con diferentes tipos. On Tue, Jul 21, 2020 at 12:21 PM Lemarchand Barker wrote: > Entonces supongo que el archivo lo generaron usando win, mi compañero > me dijo prácticamente lo mismo que Ricardo, que sea latin. > Me dijo que con Libreoffice; que es lo que uso; que lo puedo ir > cambiando la opción "conjunto de caracteres" hasta que no haya > caracteres raros. > Gracias :) > > El mar., 21 jul. 2020 a las 19:02, Darío vía Python-es > () escribió: > > > > > > Estaba hablando con un compañero y me acaba de decir lo mismo. > > Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? > > Gracias > > > > > > Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser > latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo > > > > # -*- coding: utf-8 -*- > > > > al inicio del guión. > > > > > > > > > > > > Enviado desde mi smartphone Samsung Galaxy. > > > > > > -------- Mensaje original -------- > > De: Ricardo Cárdenes > > Fecha: 21/7/20 18:42 (GMT-03:00) > > A: La lista de python en castellano > > Asunto: Re: [Python-es] [Consulta] Caracter raro en .csv > > > > El problema es que estás leyendo el fichero asumiendo una cierta > codificación (casi seguramente UTF-8, por defecto), mientras que el fichero > realmente contiene otra (probablemente "latin-1"). > > > > Ambas codificaciones coinciden sólo en caracteres con valor ASCII < 128. > > > > Prueba a abrir el fichero así: open(nombre_del_fichero, > encoding='latin-1') > > > > On Tue, Jul 21, 2020 at 11:37 AM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >> > >> Hola, otra vez les molesto para consultar lo siguiente. Leo el archivo > >> perfecto, estoy viendo cuántas veces aparece un mismo laboratorio. > >> Pero el tema es el siguiente, adjunto img. Como se puede ver, se ve el > >> caracter que reemplaza una letra, el laboratorio se llama Andrómaco > >> (chileno), si lo busco tal cual me figura que no está en lista: > >> > >> /usr/bin/python3.8 /home/raiden/Programacion/curso/ejercicios/pami.py > >> Ingrese nombre del laboratorio: Andrómaco > >> El laboratorio Andrómaco no figura en lista. > >> > >> Si lo busco sin acento, el resultado es el mismo, también pensé en > >> buscar por partes, es decir que en lugar de que busque por el nombre > >> completo: Andrómaco que busque por las 3 primeras letras: And. Esto > >> todavía no lo hice porque esa parte la quiero practicar después. Ahora > >> la duda es la siguiente, hay alguna forma de buscar por el nombre > >> completo del laboratorio; tal cual lo estoy haciendo; y tratar de > >> solucionar el Andr?maco? > >> > >> Muchas gracias, saludos > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lasizoillo en gmail.com Wed Jul 22 05:58:36 2020 From: lasizoillo en gmail.com (lasizoillo) Date: Wed, 22 Jul 2020 11:58:36 +0200 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: El mié., 22 jul. 2020 a las 0:01, Darío vía Python-es () escribió: > > Estaba hablando con un compañero y me acaba de decir lo mismo. > Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? > Gracias > > > Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser latin > (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo > > # -*- coding: utf-8 -*- > > al inicio del guión. > > Con eso estás informando al intérprete cuál es la codificación del fichero python (tu código fuente) y para nada estás especificando la codificación de caracteres con la que te comunicas con el mundo exterior. Con eso afectas a la codificación de cadenas unicode en tu código. Unos ejemplos estrambóticos para ilustrarlo en python2 (sacados de una charla del 2011): Ejemplo 1: # -*- coding: rot13 -*- cevag h"fnyhqbf qrfqr rfcn?n" Ejemplo 2: # -*- coding: rot13 -*- cevag "hola mundo desde españa" La forma correcta es la comentada por ricardo: open(nombre_del_fichero, encoding='latin-1') En cuanto a si es mejor latin-1 o utf-8 depende. Con latin-1 todos los caracteres ocupan un byte por lo que el uso de memoria es más predecible y se puede usar algoritmos como el boyer-moore en la representación binaria del texto. Con utf-8 tienes una representación mayormente compacta pero capaz de representar klingon, kanji, cirílico y caracteres de casi cualquier otra lengua. Personalmente prefiero utf-8 y tener muy claro que cadenas de bytes y de texto son cosas completamente diferentes aunque haya formas de convertir unas en otras: por la red o a la consola de texto o... transmites bytes e internamente trabajas con cadenas de texto. Cualquier comunicación dentro/fuera o fuera/dentro requiere definir una codificación de caracteres (la que sea) y hacer la conversión correcta. Un saludo, Javi ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 22 10:18:34 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Wed, 22 Jul 2020 11:18:34 -0300 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: Buenas, les cuento que solucioné el problema. Lo solucioné cambiando la configuración de PyCharm, quiero adjuntar la foto para que vean, si es posible. Resulta que en la parte de Settings del ide, cargué el csv que estoy usando y me muestra que usa codificación iso como bien me dijeron anteriormente; y el problema asumo se generaba porque el ide por default está en utf-8 y es por eso que creo que por más que yo le haya pasado el parámetro de: encoding='ISO-8859-1' no me servía de mucho. Cuestión que en la parte de configuración del ide, cargo el archivo .csv y paso todo a iso. Ejecuto de nuevo el programa y seguía sin darme el resultado que necesitaba. Pasaba lo siguiente: Yo buscaba así: Ingrese nombre del laboratorio: Bagó El laboratorio Bagó no figura en lista. Hasta que por fin pensé y lo busqué de la siguiente forma: Ingrese nombre del laboratorio: Andr?maco El laboratorio Andr?maco aparece en lista 52 veces Hice un copy-paste del nombre del laboratorio, lo copié del csv y lo pegué en ide cuando me pide que ingrese el nombre y funcionó. Ahora lo que tengo que hacer es afinar la búsqueda y acá es donde es muy seguro que los vuelva a molestar en breve. Gracias 1000 a todos por la paciencia El mié., 22 jul. 2020 a las 6:59, lasizoillo () escribió: > > > > El mié., 22 jul. 2020 a las 0:01, Darío vía Python-es () escribió: >> >> >> Estaba hablando con un compañero y me acaba de decir lo mismo. >> Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? >> Gracias >> >> >> Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo >> >> # -*- coding: utf-8 -*- >> >> al inicio del guión. >> >> > > Con eso estás informando al intérprete cuál es la codificación del fichero python (tu código fuente) y para nada estás especificando la codificación de caracteres con la que te comunicas con el mundo exterior. Con eso afectas a la codificación de cadenas unicode en tu código. Unos ejemplos estrambóticos para ilustrarlo en python2 (sacados de una charla del 2011): > > Ejemplo 1: > # -*- coding: rot13 -*- > cevag h"fnyhqbf qrfqr rfcn?n" > > Ejemplo 2: > # -*- coding: rot13 -*- > cevag "hola mundo desde españa" > > La forma correcta es la comentada por ricardo: open(nombre_del_fichero, encoding='latin-1') > > En cuanto a si es mejor latin-1 o utf-8 depende. Con latin-1 todos los caracteres ocupan un byte por lo que el uso de memoria es más predecible > y se puede usar algoritmos como el boyer-moore en la representación binaria del texto. Con utf-8 tienes una representación mayormente compacta > pero capaz de representar klingon, kanji, cirílico y caracteres de casi cualquier otra lengua. Personalmente prefiero utf-8 y tener muy claro > que cadenas de bytes y de texto son cosas completamente diferentes aunque haya formas de convertir unas en otras: por la red o a la consola de > texto o... transmites bytes e internamente trabajas con cadenas de texto. Cualquier comunicación dentro/fuera o fuera/dentro requiere definir > una codificación de caracteres (la que sea) y hacer la conversión correcta. > > Un saludo, > > Javi > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un mensaje adjunto que no está en formato texto plano... Nombre : set.png Tipo : image/png Tamaño : 102628 bytes Descripción: no disponible Url : From ricardo.cardenes en gmail.com Wed Jul 22 15:13:53 2020 From: ricardo.cardenes en gmail.com (=?UTF-8?Q?Ricardo_C=C3=A1rdenes?=) Date: Wed, 22 Jul 2020 09:13:53 -1000 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: References: <5f1761ec.1c69fb81.bcdf2.5b9d@mx.google.com> Message-ID: Atiende a lo que dijo lasizoillo: la configuración que has cambiado ahí sólo se refiere a la codificación de los ficheros ".py" en sí. Nada más. Fíjate que está bajo la configuración de "editor". No afecta en nada a lo que leen o escriben tus programas. Para facilitarte la vida, yo haría lo que comentó tu colega: ve a LibreOffice, lee el archivo CSV y vuelve a escribirlo, pero cambiando la codificación. Estar haciendo "copy paste" es ineficiente. On Wed, Jul 22, 2020 at 4:19 AM Lemarchand Barker wrote: > Buenas, les cuento que solucioné el problema. Lo solucioné cambiando > la configuración de PyCharm, quiero adjuntar la foto para que vean, si > es posible. > Resulta que en la parte de Settings del ide, cargué el csv que estoy > usando y me muestra que usa codificación iso como bien me dijeron > anteriormente; y el problema asumo se generaba porque el ide por > default está en utf-8 y es por eso que creo que por más que yo le haya > pasado el parámetro de: encoding='ISO-8859-1' no me servía de mucho. > Cuestión que en la parte de configuración del ide, cargo el archivo > .csv y paso todo a iso. Ejecuto de nuevo el programa y seguía sin > darme el resultado que necesitaba. Pasaba lo siguiente: > Yo buscaba así: > > Ingrese nombre del laboratorio: Bagó > El laboratorio Bagó no figura en lista. > > Hasta que por fin pensé y lo busqué de la siguiente forma: > > Ingrese nombre del laboratorio: Andr?maco > El laboratorio Andr?maco aparece en lista 52 veces > > Hice un copy-paste del nombre del laboratorio, lo copié del csv y lo > pegué en ide cuando me pide que ingrese el nombre y funcionó. > Ahora lo que tengo que hacer es afinar la búsqueda y acá es donde es > muy seguro que los vuelva a molestar en breve. > Gracias 1000 a todos por la paciencia > > El mié., 22 jul. 2020 a las 6:59, lasizoillo () > escribió: > > > > > > > > El mié., 22 jul. 2020 a las 0:01, Darío vía Python-es (< > python-es en python.org>) escribió: > >> > >> > >> Estaba hablando con un compañero y me acaba de decir lo mismo. > >> Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? > >> Gracias > >> > >> > >> Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser > latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo > >> > >> # -*- coding: utf-8 -*- > >> > >> al inicio del guión. > >> > >> > > > > Con eso estás informando al intérprete cuál es la codificación del > fichero python (tu código fuente) y para nada estás especificando la > codificación de caracteres con la que te comunicas con el mundo exterior. > Con eso afectas a la codificación de cadenas unicode en tu código. Unos > ejemplos estrambóticos para ilustrarlo en python2 (sacados de una charla > del 2011): > > > > Ejemplo 1: > > # -*- coding: rot13 -*- > > cevag h"fnyhqbf qrfqr rfcn?n" > > > > Ejemplo 2: > > # -*- coding: rot13 -*- > > cevag "hola mundo desde españa" > > > > La forma correcta es la comentada por ricardo: open(nombre_del_fichero, > encoding='latin-1') > > > > En cuanto a si es mejor latin-1 o utf-8 depende. Con latin-1 todos los > caracteres ocupan un byte por lo que el uso de memoria es más predecible > > y se puede usar algoritmos como el boyer-moore en la representación > binaria del texto. Con utf-8 tienes una representación mayormente compacta > > pero capaz de representar klingon, kanji, cirílico y caracteres de casi > cualquier otra lengua. Personalmente prefiero utf-8 y tener muy claro > > que cadenas de bytes y de texto son cosas completamente diferentes > aunque haya formas de convertir unas en otras: por la red o a la consola de > > texto o... transmites bytes e internamente trabajas con cadenas de > texto. Cualquier comunicación dentro/fuera o fuera/dentro requiere definir > > una codificación de caracteres (la que sea) y hacer la conversión > correcta. > > > > Un saludo, > > > > Javi > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Wed Jul 22 15:21:03 2020 From: lemarchand8679 en gmail.com (lemarchand8679) Date: Wed, 22 Jul 2020 16:21:03 -0300 Subject: [Python-es] [Consulta] Caracter raro en .csv In-Reply-To: Message-ID: <5f1891a3.1c69fb81.b030.3508@mx.google.com> Hola, hice lo del LibreOffice, fuí probando distintos encodings. Salvo que vuelva a ponerlo en utf-8 desde el LibreO, y vuelva a poner el PyCharm en utf-8 e intentar buscar de nuevo.Con la configuración actual tuve que añadir al principio:#!/usr/bin/python# -*- coding: latin-1 -*-Voy a intentar lo que dijiste, a ver que pasa.GraciasEnviado desde mi smartphone Samsung Galaxy. -------- Mensaje original --------De: Ricardo Cárdenes Fecha: 22/7/20 16:15 (GMT-03:00) A: La lista de python en castellano Asunto: Re: [Python-es] [Consulta] Caracter raro en .csv Atiende a lo que dijo lasizoillo: la configuración que has cambiado ahí sólo se refiere a la codificación de los ficheros ".py" en sí. Nada más. Fíjate que está bajo la configuración de "editor". No afecta en nada a lo que leen o escriben tus programas.Para facilitarte la vida, yo haría lo que comentó tu colega: ve a LibreOffice, lee el archivo CSV y vuelve a escribirlo, pero cambiando la codificación. Estar haciendo "copy paste" es ineficiente.On Wed, Jul 22, 2020 at 4:19 AM Lemarchand Barker wrote:Buenas, les cuento que solucioné el problema. Lo solucioné cambiando la configuración de PyCharm, quiero adjuntar la foto para que vean, si es posible. Resulta que en la parte de Settings del ide, cargué el csv que estoy usando y me muestra que usa codificación iso como bien me dijeron anteriormente; y el problema asumo se generaba porque el ide por default está en utf-8 y es por eso que creo que por más que yo le haya pasado el parámetro de: encoding='ISO-8859-1' no me servía de mucho. Cuestión que en la parte de configuración del ide, cargo el archivo .csv y paso todo a iso. Ejecuto de nuevo el programa y seguía sin darme el resultado que necesitaba. Pasaba lo siguiente: Yo buscaba así: Ingrese nombre del laboratorio: Bagó El laboratorio Bagó no figura en lista. Hasta que por fin pensé y lo busqué de la siguiente forma: Ingrese nombre del laboratorio: Andr?maco El laboratorio Andr?maco aparece en lista 52 veces Hice un copy-paste del nombre del laboratorio, lo copié del csv y lo pegué en ide cuando me pide que ingrese el nombre y funcionó. Ahora lo que tengo que hacer es afinar la búsqueda y acá es donde es muy seguro que los vuelva a molestar en breve. Gracias 1000 a todos por la paciencia El mié., 22 jul. 2020 a las 6:59, lasizoillo () escribió: > > > > El mié., 22 jul. 2020 a las 0:01, Darío vía Python-es () escribió: >> >> >> Estaba hablando con un compañero y me acaba de decir lo mismo. >> Ahora, lo ideal es que se use el utf o latin? Cuál es más aconsejable? >> Gracias >> >> >> Hola, uso utf-8 porque tengo entendido que si usás Windows debe ser latin (al menos eso me pasaba al compilar archvos .tex). Habitualmente pongo >> >> # -*- coding: utf-8 -*- >> >> al inicio del guión. >> >> > > Con eso estás informando al intérprete cuál es la codificación del fichero python (tu código fuente) y para nada estás especificando la codificación de caracteres con la que te comunicas con el mundo exterior. Con eso afectas a la codificación de cadenas unicode en tu código. Unos ejemplos estrambóticos para ilustrarlo en python2 (sacados de una charla del 2011): > > Ejemplo 1: > # -*- coding: rot13 -*- > cevag h"fnyhqbf qrfqr rfcn?n" > > Ejemplo 2: > # -*- coding: rot13 -*- > cevag "hola mundo desde españa" > > La forma correcta es la comentada por ricardo: open(nombre_del_fichero, encoding='latin-1') > > En cuanto a si es mejor latin-1 o utf-8 depende. Con latin-1 todos los caracteres ocupan un byte por lo que el uso de memoria es más predecible > y se puede usar algoritmos como el boyer-moore en la representación binaria del texto. Con utf-8 tienes una representación mayormente compacta > pero capaz de representar klingon, kanji, cirílico y caracteres de casi cualquier otra lengua. Personalmente prefiero utf-8 y tener muy claro > que cadenas de bytes y de texto son cosas completamente diferentes aunque haya formas de convertir unas en otras: por la red o a la consola de > texto o... transmites bytes e internamente trabajas con cadenas de texto. Cualquier comunicación dentro/fuera o fuera/dentro requiere definir > una codificación de caracteres (la que sea) y hacer la conversión correcta. > > Un saludo, > > Javi > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es _______________________________________________ Python-es mailing list Python-es en python.org https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 24 14:43:26 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Fri, 24 Jul 2020 15:43:26 -0300 Subject: [Python-es] [Consulta] csv y diccionario Message-ID: Hola, esta vez les pregunto como bien me habían comentado antes, a la hora de trabajar con un archivo csv que use diccionario. Pero hay algún motivo en particular o en especial por el cuál se hace esto? Es por cuestión de rendimiento a nivel sistema o porque ofrece una forma más fácil de trabajar y manipular la información? Por lo que leí es mejor usar el diccionario en vez de manejar la una lista individual de cadenas. Lo entiendo pero hay algún plus o algo que favorezca el uso del diccionario? Gracias, saludos From ciberseba en gmail.com Fri Jul 24 17:27:26 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Fri, 24 Jul 2020 17:27:26 -0400 Subject: [Python-es] [Consulta] csv y diccionario In-Reply-To: References: Message-ID: Primero, creo pertinente aclarar conceptos. Sería bueno que nos dijeras en que otros lenguajes te manejas o tienes experiencia para hacer un símil. Python tiene 4 tipos de estructuras de datos. Listas, conjuntos (sets), tuplas y diccionarios. Las listas son, como dice su nombre, un listado de objetos (que pueden ser enteros, strings, otras listas, etc) y que permiten operaciones entre si. Los conjuntos son similar con la diferencia que el conjunto no acepta elementos repetidos, y de que aceptan operaciones típicas de conjuntos como unión, intercepción o diferencia. Las tuplas son similares a las listas, con la diferencia de que son *inmutables* (o sea, no puedes cambiarlas una vez creadas). Y, finalmente, tenemos los diccionarios, que son una estructura que guarda pares de clave-valor, y que también pueden almacenar como valor cualquier tipo de dato (otros diccionarios, listas, etc). Hice la salvedad de diferenciar las estructuras de dato, porque, como siempre, esto incide en la decisión de qué usar, y eso simplemente lo ves dependiendo de lo que necesites. Para algunos casos conviene listados, para otros conjuntos, para otros tuplas y para otros diccionarios. Es cierto que tal vez un cierto problema lo puedes enfocar de varias formas pero ahí el rendimiento entra en juego. No es lo mismo procesar unos cientos datos que millones de datos... y un desarrollo bien optimizado en Python hace muchísimo la diferencia en rendimiento. Esto se nota sobre todo si después despliegas tus desarrollos (ya sea en la nube, en un servidor, etc). Ahora, ¿por qué los diccionarios son muy buenos? Pues porque es una estructura de dato muy versátil, te permite buscar por keys, anidar objetos, filtrar, etc. Además es muy similar a operar un JSON (sin serlo), entonces es mucho más natural a la hora de trabajar datos versus una lista/tupla. Esto es muy útil si trabajas haciendo microservicios en Python por ejemplo, ya que te hace sencillísimo mapear inputs/outputs y trabajarlos. Es importante si la aclaración de que *no es lo mismo que JSON*, hay muchas personas que he conocido que piensan erróneamente esto último cuando recién se están introduciendo en Python y después se frustran cuando notan que sus desarrollos no devuelven respuestas esperadas (o en el formato esperado). Ahora, si quieres ver rendimiento o complejidad algorítmica, este link ( https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/DataStructures.html) puede darte más luces. Ojo, repito que no es que una estructura de datos sea mejor que otra, depende mucho de la necesidad, caso de uso o requerimiento en específico. Saludos. On Fri, Jul 24, 2020 at 2:46 PM Lemarchand Barker wrote: > Hola, esta vez les pregunto como bien me habían comentado antes, a la > hora de trabajar con un archivo csv que use diccionario. Pero hay > algún motivo en particular o en especial por el cuál se hace esto? Es > por cuestión de rendimiento a nivel sistema o porque ofrece una forma > más fácil de trabajar y manipular la información? > Por lo que leí es mejor usar el diccionario en vez de manejar la una > lista individual de cadenas. Lo entiendo pero hay algún plus o algo > que favorezca el uso del diccionario? > Gracias, saludos > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From lemarchand8679 en gmail.com Fri Jul 24 17:52:39 2020 From: lemarchand8679 en gmail.com (Lemarchand Barker) Date: Fri, 24 Jul 2020 18:52:39 -0300 Subject: [Python-es] [Consulta] csv y diccionario In-Reply-To: References: Message-ID: Hola Sebastián, como es obvio no soy programadora innata pero python siempre me atrajo. En mi juventud programé con php y html+css, pero nunca me llevé bien con ese lenguaje, me resulta incómodo, no digo que sea malo ni nada, yo no me sentía cómoda usándolo. Fue ahí cuando me pasé a python 2.7, cuando el 3 estaba empezando. Después por cuestiones personales tuve que dejar la programación y siempre lo vi como un pendiente, me gusta, claramente me lleva más tiempo aprenderlo pero no me doy por vencido aunque solo tenga conocimientos más que básicos. Preguntaba lo del diccionario porque acá en la lista ya me lo habían sugerido y porque en muchos ejemplos que veo y leo también lo usan y quería saber si había algún motivo en especial por el cual se lo usaba. Y creo que más allá de lo que me dijiste, que todo depende la tarea que quiera realizar y la cantidad de datos a analizar pero creo que la ventaja principal es la que me dijiste, la versatilidad del diccionario. Vi por ejemplo que un diccionario puede almacenar varios csv a la vez. Muchas gracias, saludos El vie., 24 jul. 2020 a las 18:28, Sebastián Arancibia () escribió: > > Primero, creo pertinente aclarar conceptos. Sería bueno que nos dijeras en que otros lenguajes te manejas o tienes experiencia para hacer un símil. > > Python tiene 4 tipos de estructuras de datos. Listas, conjuntos (sets), tuplas y diccionarios. Las listas son, como dice su nombre, un listado de objetos (que pueden ser enteros, strings, otras listas, etc) y que permiten operaciones entre si. Los conjuntos son similar con la diferencia que el conjunto no acepta elementos repetidos, y de que aceptan operaciones típicas de conjuntos como unión, intercepción o diferencia. Las tuplas son similares a las listas, con la diferencia de que son inmutables (o sea, no puedes cambiarlas una vez creadas). Y, finalmente, tenemos los diccionarios, que son una estructura que guarda pares de clave-valor, y que también pueden almacenar como valor cualquier tipo de dato (otros diccionarios, listas, etc). > > Hice la salvedad de diferenciar las estructuras de dato, porque, como siempre, esto incide en la decisión de qué usar, y eso simplemente lo ves dependiendo de lo que necesites. Para algunos casos conviene listados, para otros conjuntos, para otros tuplas y para otros diccionarios. Es cierto que tal vez un cierto problema lo puedes enfocar de varias formas pero ahí el rendimiento entra en juego. No es lo mismo procesar unos cientos datos que millones de datos... y un desarrollo bien optimizado en Python hace muchísimo la diferencia en rendimiento. Esto se nota sobre todo si después despliegas tus desarrollos (ya sea en la nube, en un servidor, etc). > > Ahora, ¿por qué los diccionarios son muy buenos? Pues porque es una estructura de dato muy versátil, te permite buscar por keys, anidar objetos, filtrar, etc. Además es muy similar a operar un JSON (sin serlo), entonces es mucho más natural a la hora de trabajar datos versus una lista/tupla. Esto es muy útil si trabajas haciendo microservicios en Python por ejemplo, ya que te hace sencillísimo mapear inputs/outputs y trabajarlos. Es importante si la aclaración de que no es lo mismo que JSON, hay muchas personas que he conocido que piensan erróneamente esto último cuando recién se están introduciendo en Python y después se frustran cuando notan que sus desarrollos no devuelven respuestas esperadas (o en el formato esperado). > > Ahora, si quieres ver rendimiento o complejidad algorítmica, este link (https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/DataStructures.html) puede darte más luces. Ojo, repito que no es que una estructura de datos sea mejor que otra, depende mucho de la necesidad, caso de uso o requerimiento en específico. > > Saludos. > > On Fri, Jul 24, 2020 at 2:46 PM Lemarchand Barker wrote: >> >> Hola, esta vez les pregunto como bien me habían comentado antes, a la >> hora de trabajar con un archivo csv que use diccionario. Pero hay >> algún motivo en particular o en especial por el cuál se hace esto? Es >> por cuestión de rendimiento a nivel sistema o porque ofrece una forma >> más fácil de trabajar y manipular la información? >> Por lo que leí es mejor usar el diccionario en vez de manejar la una >> lista individual de cadenas. Lo entiendo pero hay algún plus o algo >> que favorezca el uso del diccionario? >> Gracias, saludos >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From ciberseba en gmail.com Sat Jul 25 00:28:13 2020 From: ciberseba en gmail.com (=?UTF-8?Q?Sebasti=C3=A1n_Arancibia?=) Date: Sat, 25 Jul 2020 00:28:13 -0400 Subject: [Python-es] [Consulta] csv y diccionario In-Reply-To: References: Message-ID: Entiendo, la verdad no sabía que no programabas, pensé que venías de otro lenguaje. Que bien que te animes en aprender, además Python es muy versátil así que lo puedes aplicar en muchas cosas. Claro, la versatilidad es una de las grandes ventajas del diccionario, y la verdad es que te había preguntado lo de los lenguajes porque los diccionarios tienen un simil en otros lenguajes (como por ejemplo en Java está el Map, no es lo mismo -en lo personal prefiero el diccionario de Python que el Map de Java- pero es algo similar en cuanto a uso). Pero ahí la gracia de usar diccionarios es, si tengo varios csv por ejemplo, cada registro lo podría asociar a un diccionario, y si son varios csv tener tal vez una lista de varios diccionarios (donde cada diccionario puede ser una fila con todas las columnas, donde la clave es el nombre de la columna). Tampoco es la idea ir moviendo el archivo dentro de estructuras de datos, siempre lo ideal es leer el archivo, cerrarlo, y trabajar con la información del archivo. Saludos! On Fri, Jul 24, 2020 at 5:53 PM Lemarchand Barker wrote: > Hola Sebastián, como es obvio no soy programadora innata pero python > siempre me atrajo. En mi juventud programé con php y html+css, pero > nunca me llevé bien con ese lenguaje, me resulta incómodo, no digo que > sea malo ni nada, yo no me sentía cómoda usándolo. Fue ahí cuando me > pasé a python 2.7, cuando el 3 estaba empezando. Después por > cuestiones personales tuve que dejar la programación y siempre lo vi > como un pendiente, me gusta, claramente me lleva más tiempo aprenderlo > pero no me doy por vencido aunque solo tenga conocimientos más que > básicos. > Preguntaba lo del diccionario porque acá en la lista ya me lo habían > sugerido y porque en muchos ejemplos que veo y leo también lo usan y > quería saber si había algún motivo en especial por el cual se lo > usaba. Y creo que más allá de lo que me dijiste, que todo depende la > tarea que quiera realizar y la cantidad de datos a analizar pero creo > que la ventaja principal es la que me dijiste, la versatilidad del > diccionario. Vi por ejemplo que un diccionario puede almacenar varios > csv a la vez. > Muchas gracias, saludos > > El vie., 24 jul. 2020 a las 18:28, Sebastián Arancibia > () escribió: > > > > Primero, creo pertinente aclarar conceptos. Sería bueno que nos dijeras > en que otros lenguajes te manejas o tienes experiencia para hacer un símil. > > > > Python tiene 4 tipos de estructuras de datos. Listas, conjuntos (sets), > tuplas y diccionarios. Las listas son, como dice su nombre, un listado de > objetos (que pueden ser enteros, strings, otras listas, etc) y que permiten > operaciones entre si. Los conjuntos son similar con la diferencia que el > conjunto no acepta elementos repetidos, y de que aceptan operaciones > típicas de conjuntos como unión, intercepción o diferencia. Las tuplas son > similares a las listas, con la diferencia de que son inmutables (o sea, no > puedes cambiarlas una vez creadas). Y, finalmente, tenemos los > diccionarios, que son una estructura que guarda pares de clave-valor, y que > también pueden almacenar como valor cualquier tipo de dato (otros > diccionarios, listas, etc). > > > > Hice la salvedad de diferenciar las estructuras de dato, porque, como > siempre, esto incide en la decisión de qué usar, y eso simplemente lo ves > dependiendo de lo que necesites. Para algunos casos conviene listados, para > otros conjuntos, para otros tuplas y para otros diccionarios. Es cierto que > tal vez un cierto problema lo puedes enfocar de varias formas pero ahí el > rendimiento entra en juego. No es lo mismo procesar unos cientos datos que > millones de datos... y un desarrollo bien optimizado en Python hace > muchísimo la diferencia en rendimiento. Esto se nota sobre todo si después > despliegas tus desarrollos (ya sea en la nube, en un servidor, etc). > > > > Ahora, ¿por qué los diccionarios son muy buenos? Pues porque es una > estructura de dato muy versátil, te permite buscar por keys, anidar > objetos, filtrar, etc. Además es muy similar a operar un JSON (sin serlo), > entonces es mucho más natural a la hora de trabajar datos versus una > lista/tupla. Esto es muy útil si trabajas haciendo microservicios en Python > por ejemplo, ya que te hace sencillísimo mapear inputs/outputs y > trabajarlos. Es importante si la aclaración de que no es lo mismo que JSON, > hay muchas personas que he conocido que piensan erróneamente esto último > cuando recién se están introduciendo en Python y después se frustran cuando > notan que sus desarrollos no devuelven respuestas esperadas (o en el > formato esperado). > > > > Ahora, si quieres ver rendimiento o complejidad algorítmica, este link ( > https://www.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/DataStructures.html) > puede darte más luces. Ojo, repito que no es que una estructura de datos > sea mejor que otra, depende mucho de la necesidad, caso de uso o > requerimiento en específico. > > > > Saludos. > > > > On Fri, Jul 24, 2020 at 2:46 PM Lemarchand Barker < > lemarchand8679 en gmail.com> wrote: > >> > >> Hola, esta vez les pregunto como bien me habían comentado antes, a la > >> hora de trabajar con un archivo csv que use diccionario. Pero hay > >> algún motivo en particular o en especial por el cuál se hace esto? Es > >> por cuestión de rendimiento a nivel sistema o porque ofrece una forma > >> más fácil de trabajar y manipular la información? > >> Por lo que leí es mejor usar el diccionario en vez de manejar la una > >> lista individual de cadenas. Lo entiendo pero hay algún plus o algo > >> que favorezca el uso del diccionario? > >> Gracias, saludos > >> _______________________________________________ > >> Python-es mailing list > >> Python-es en python.org > >> https://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > > Python-es mailing list > > Python-es en python.org > > https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: