From anlismon en gmail.com Thu Nov 1 03:10:57 2018 From: anlismon en gmail.com (Angel Lis) Date: Thu, 1 Nov 2018 08:10:57 +0100 Subject: [Python-es] Distintos Encodings en Python In-Reply-To: References: Message-ID: Hola, en Python3 todo texto es unicode por defecto y el encoding del source es siempre unicode. En este pagina te lo explica: https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit Un saludo. El mié., 31 oct. 2018 a las 14:24, Sergio Fernández () escribió: > Primero, definiendo en la cabecera de tus ficheros > https://docs.python.org/2.3/whatsnew/section-encodings.html > > #!/usr/bin/env python > # -*- coding: UTF-8 -*- > > Segundo, defiendo explicitamente el encoding cuando abres ficheros para > lectura/escritura: > > open('some.csv', encoding='utf-8') > > > > > > On Wed, Oct 31, 2018 at 6:16 AM Pixu Kideak wrote: > >> Gracias por el consejo Sergio. >> >> ¿Cómo podría forzar a que el script / app fuera obligado a utilizar >> Unicode? >> >> Saludos ;-) >> >> On Wed, 31 Oct 2018 at 13:44, Sergio Fernández wrote: >> >>> Utiliza siempre un encoding independiente de la plataforma que soporte >>> el juego de caracteres que necesitas. Unicode es tu amigo ;-) >>> >>> On Wed, Oct 31, 2018 at 5:36 AM Pixu Kideak >>> wrote: >>> >>>> Hola, >>>> >>>> Estoy trabajando en un entorno Windows con Python 3.7 y según veo en el >>>> encoding utilizo cp1252 - windows -1252 Western Europe. >>>> >>>> Quiero obtener información de una web con caracteres rusos y guardar la >>>> información en un fichero CSV. >>>> >>>> Según he visto el encoding necesario es cp1251 - windows - 1251 - >>>> Bulgarian, Byelorussian, Macedonian, Russian, Serbian. >>>> >>>> Pero no sé cómo puedo usarlo desde Python o qué debo hacer para poder >>>> grabar la información correctamente en el fichero CSV. >>>> >>>> ¿Alguien me podría mostrar algo de luz? >>>> >>>> Un saludo ;-) >>>> >>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> >>> >>> -- >>> Sergio Fernández >>> http://www.wikier.org >>> _______________________________________________ >>> 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 >> > > > -- > Sergio Fernández > http://www.wikier.org > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- -- Àngel Lis. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From larepisa en gmail.com Thu Nov 1 03:26:51 2018 From: larepisa en gmail.com (LA REPISA) Date: Thu, 1 Nov 2018 08:26:51 +0100 Subject: [Python-es] =?iso-8859-1?q?=28sin_asunto=29?= In-Reply-To: References: Message-ID: Buenos días, Al instalar Anaconda (Python 3.7) en Windows 10 me aparece el siguiente error: ?No se encuentra el ordinal 242 en la biblioteca de vínculos dinámicos ?\Anaconda3\Library\bin\mkl_intel_thread.dll? ¿Sabéis a qué se debe? Es la primera vez que me pasa Mil gracias From larepisa en gmail.com Thu Nov 1 03:28:19 2018 From: larepisa en gmail.com (LA REPISA) Date: Thu, 1 Nov 2018 08:28:19 +0100 Subject: [Python-es] =?utf-8?q?Problemas_instalaci=C3=B3n_Python?= References: Message-ID: <04CC97DB-11D3-413E-BCF3-00B14F31317E@gmail.com> > > Buenos días, > > Al instalar Anaconda (Python 3.7) en Windows 10 me aparece el siguiente error: > > ?No se encuentra el ordinal 242 en la biblioteca de vínculos dinámicos ?\Anaconda3\Library\bin\mkl_intel_thread.dll? > > ¿Sabéis a qué se debe? > > Es la primera vez que me pasa > > Mil gracias > From pixukideak en gmail.com Thu Nov 1 06:57:41 2018 From: pixukideak en gmail.com (Pixu Kideak) Date: Thu, 1 Nov 2018 11:57:41 +0100 Subject: [Python-es] Distintos Encodings en Python In-Reply-To: References: Message-ID: Hola, En la prueba que estoy realizando, utilizo BeautifulSoup [ https://www.crummy.com/software/BeautifulSoup/bs4/doc/] con Python 3.7. Mi objetivo es mediante BeautifulSoup tener todo el código de la página y por ejemplo almacenar el título de ésta en un fichero CSV. (En realidad se tratan de más datos de la web que lo realiza mediante un búcle recorriendo las distintas webs existentes; pero creo que es suficiente si consigo almacenar el título de la web que tiene letras del alfabeto cirílico en el fichero CSV). Primeramente quiero verlo todo en consola, así soy capaz de obtener el título de la web y pintarlo en la consola; pero a la hora de mostrarlo, no me muestra los caracteres cirílicos sino "????" es por eso que enfocaba el problema cómo si se tratara de un problema de encoding. Un saludo, On Thu, 1 Nov 2018 at 08:11, Angel Lis wrote: > Hola, > en Python3 todo texto es unicode por defecto y el encoding del source es > siempre unicode. > En este pagina te lo explica: > > https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit > > Un saludo. > > El mié., 31 oct. 2018 a las 14:24, Sergio Fernández () > escribió: > >> Primero, definiendo en la cabecera de tus ficheros >> https://docs.python.org/2.3/whatsnew/section-encodings.html >> >> #!/usr/bin/env python >> # -*- coding: UTF-8 -*- >> >> Segundo, defiendo explicitamente el encoding cuando abres ficheros para >> lectura/escritura: >> >> open('some.csv', encoding='utf-8') >> >> >> >> >> >> On Wed, Oct 31, 2018 at 6:16 AM Pixu Kideak wrote: >> >>> Gracias por el consejo Sergio. >>> >>> ¿Cómo podría forzar a que el script / app fuera obligado a utilizar >>> Unicode? >>> >>> Saludos ;-) >>> >>> On Wed, 31 Oct 2018 at 13:44, Sergio Fernández >>> wrote: >>> >>>> Utiliza siempre un encoding independiente de la plataforma que soporte >>>> el juego de caracteres que necesitas. Unicode es tu amigo ;-) >>>> >>>> On Wed, Oct 31, 2018 at 5:36 AM Pixu Kideak >>>> wrote: >>>> >>>>> Hola, >>>>> >>>>> Estoy trabajando en un entorno Windows con Python 3.7 y según veo en >>>>> el encoding utilizo cp1252 - windows -1252 Western Europe. >>>>> >>>>> Quiero obtener información de una web con caracteres rusos y guardar >>>>> la información en un fichero CSV. >>>>> >>>>> Según he visto el encoding necesario es cp1251 - windows - 1251 - >>>>> Bulgarian, Byelorussian, Macedonian, Russian, Serbian. >>>>> >>>>> Pero no sé cómo puedo usarlo desde Python o qué debo hacer para poder >>>>> grabar la información correctamente en el fichero CSV. >>>>> >>>>> ¿Alguien me podría mostrar algo de luz? >>>>> >>>>> Un saludo ;-) >>>>> >>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es en python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> >>>> >>>> >>>> -- >>>> Sergio Fernández >>>> http://www.wikier.org >>>> _______________________________________________ >>>> 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 >>> >> >> >> -- >> Sergio Fernández >> http://www.wikier.org >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > > > -- > -- > Àngel Lis. > _______________________________________________ > 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 kelertxiki en gmail.com Thu Nov 1 07:34:24 2018 From: kelertxiki en gmail.com (Ander Garmendia) Date: Thu, 1 Nov 2018 12:34:24 +0100 Subject: [Python-es] Distintos Encodings en Python In-Reply-To: References: Message-ID: Hola, tiene pinta de que al scrapear la página no estás ulizando el codec adecuado (creo que pusiste cp1251) y por lo tanto el programa no es capaz de interpretar el texto. Primero, cerciorarte del encoding que están ulizando esas páginas web y utiliza ese encoding en BeautifulSoup para obtener el contenido ( no conozco la librería, por lo que no te puedo decir mas, pero seguro que hay alguna manera de definir el encoding). Una vez que tienes el contenido bien descodificado, puedes trabajar con el tranquilamente, ya que Python3 trabaja con bytes. Para terminar si quieres guardar el contenido tendrás que volver a codificarlo, preferiblemente en UTF8, y como te han comentado en los ejemplos que te han enviado anteriormente. Un saludo. El jue., 1 nov. 2018 11:59, Pixu Kideak escribió: > Hola, > > En la prueba que estoy realizando, utilizo BeautifulSoup [ > https://www.crummy.com/software/BeautifulSoup/bs4/doc/] con Python 3.7. > > Mi objetivo es mediante BeautifulSoup tener todo el código de la página y > por ejemplo almacenar el título de ésta en un fichero CSV. (En realidad se > tratan de más datos de la web que lo realiza mediante un búcle recorriendo > las distintas webs existentes; pero creo que es suficiente si consigo > almacenar el título de la web que tiene letras del alfabeto cirílico en el > fichero CSV). > > Primeramente quiero verlo todo en consola, así soy capaz de obtener el > título de la web y pintarlo en la consola; pero a la hora de mostrarlo, no > me muestra los caracteres cirílicos sino "????" es por eso que enfocaba el > problema cómo si se tratara de un problema de encoding. > > Un saludo, > > On Thu, 1 Nov 2018 at 08:11, Angel Lis wrote: > >> Hola, >> en Python3 todo texto es unicode por defecto y el encoding del source es >> siempre unicode. >> En este pagina te lo explica: >> >> https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit >> >> Un saludo. >> >> El mié., 31 oct. 2018 a las 14:24, Sergio Fernández () >> escribió: >> >>> Primero, definiendo en la cabecera de tus ficheros >>> https://docs.python.org/2.3/whatsnew/section-encodings.html >>> >>> #!/usr/bin/env python >>> # -*- coding: UTF-8 -*- >>> >>> Segundo, defiendo explicitamente el encoding cuando abres ficheros para >>> lectura/escritura: >>> >>> open('some.csv', encoding='utf-8') >>> >>> >>> >>> >>> >>> On Wed, Oct 31, 2018 at 6:16 AM Pixu Kideak >>> wrote: >>> >>>> Gracias por el consejo Sergio. >>>> >>>> ¿Cómo podría forzar a que el script / app fuera obligado a utilizar >>>> Unicode? >>>> >>>> Saludos ;-) >>>> >>>> On Wed, 31 Oct 2018 at 13:44, Sergio Fernández >>>> wrote: >>>> >>>>> Utiliza siempre un encoding independiente de la plataforma que soporte >>>>> el juego de caracteres que necesitas. Unicode es tu amigo ;-) >>>>> >>>>> On Wed, Oct 31, 2018 at 5:36 AM Pixu Kideak >>>>> wrote: >>>>> >>>>>> Hola, >>>>>> >>>>>> Estoy trabajando en un entorno Windows con Python 3.7 y según veo en >>>>>> el encoding utilizo cp1252 - windows -1252 Western Europe. >>>>>> >>>>>> Quiero obtener información de una web con caracteres rusos y guardar >>>>>> la información en un fichero CSV. >>>>>> >>>>>> Según he visto el encoding necesario es cp1251 - windows - 1251 - >>>>>> Bulgarian, Byelorussian, Macedonian, Russian, Serbian. >>>>>> >>>>>> Pero no sé cómo puedo usarlo desde Python o qué debo hacer para poder >>>>>> grabar la información correctamente en el fichero CSV. >>>>>> >>>>>> ¿Alguien me podría mostrar algo de luz? >>>>>> >>>>>> Un saludo ;-) >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es en python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> >>>>> >>>>> >>>>> -- >>>>> Sergio Fernández >>>>> http://www.wikier.org >>>>> _______________________________________________ >>>>> 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 >>>> >>> >>> >>> -- >>> Sergio Fernández >>> http://www.wikier.org >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >> >> >> -- >> -- >> Àngel Lis. >> _______________________________________________ >> 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 anlismon en gmail.com Thu Nov 1 09:29:22 2018 From: anlismon en gmail.com (Angel Lis) Date: Thu, 1 Nov 2018 14:29:22 +0100 Subject: [Python-es] Distintos Encodings en Python In-Reply-To: References: Message-ID: Creo que estas dandole demasiadas vueltas. Mi recomendacion es que trabajes siempre con unicode. Por lo que explicas quieres algo asi: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Python import urllib from bs4 import BeautifulSoup url = 'https://www.yandex.ru/' req = urllib.request.Request(url, data=None, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'}) html = urllib.request.urlopen(req).read() soup = BeautifulSoup(html) title_text = soup.find('title').text # el titulo ya es un unicode, o 'str' en python3x print("Type of title: ".format(type(title_text))) print(f"Title of the page: {title_text}") # si quieres convertilo a cp1251, pero yo trabajaria siempre con unicode title_encoded_cp1251 = title_text.encode('cp1251') ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echale un ojo a esta presentacion que te aclarara muchas cosas: http://farmdev.com/talks/unicode/ Un saludo El jue., 1 nov. 2018 a las 12:35, Ander Garmendia () escribió: > Hola, > > tiene pinta de que al scrapear la página no estás ulizando el codec > adecuado (creo que pusiste cp1251) y por lo tanto el programa no es capaz > de interpretar el texto. > > Primero, cerciorarte del encoding que están ulizando esas páginas web y > utiliza ese encoding en BeautifulSoup para obtener el contenido ( no > conozco la librería, por lo que no te puedo decir mas, pero seguro que hay > alguna manera de definir el encoding). > > Una vez que tienes el contenido bien descodificado, puedes trabajar con el > tranquilamente, ya que Python3 trabaja con bytes. > > Para terminar si quieres guardar el contenido tendrás que volver a > codificarlo, preferiblemente en UTF8, y como te han comentado en los > ejemplos que te han enviado anteriormente. > > Un saludo. > > > > El jue., 1 nov. 2018 11:59, Pixu Kideak escribió: > >> Hola, >> >> En la prueba que estoy realizando, utilizo BeautifulSoup [ >> https://www.crummy.com/software/BeautifulSoup/bs4/doc/] con Python 3.7. >> >> Mi objetivo es mediante BeautifulSoup tener todo el código de la página y >> por ejemplo almacenar el título de ésta en un fichero CSV. (En realidad se >> tratan de más datos de la web que lo realiza mediante un búcle recorriendo >> las distintas webs existentes; pero creo que es suficiente si consigo >> almacenar el título de la web que tiene letras del alfabeto cirílico en el >> fichero CSV). >> >> Primeramente quiero verlo todo en consola, así soy capaz de obtener el >> título de la web y pintarlo en la consola; pero a la hora de mostrarlo, no >> me muestra los caracteres cirílicos sino "????" es por eso que enfocaba el >> problema cómo si se tratara de un problema de encoding. >> >> Un saludo, >> >> On Thu, 1 Nov 2018 at 08:11, Angel Lis wrote: >> >>> Hola, >>> en Python3 todo texto es unicode por defecto y el encoding del source es >>> siempre unicode. >>> En este pagina te lo explica: >>> >>> https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit >>> >>> Un saludo. >>> >>> El mié., 31 oct. 2018 a las 14:24, Sergio Fernández () >>> escribió: >>> >>>> Primero, definiendo en la cabecera de tus ficheros >>>> https://docs.python.org/2.3/whatsnew/section-encodings.html >>>> >>>> #!/usr/bin/env python >>>> # -*- coding: UTF-8 -*- >>>> >>>> Segundo, defiendo explicitamente el encoding cuando abres ficheros para >>>> lectura/escritura: >>>> >>>> open('some.csv', encoding='utf-8') >>>> >>>> >>>> >>>> >>>> >>>> On Wed, Oct 31, 2018 at 6:16 AM Pixu Kideak >>>> wrote: >>>> >>>>> Gracias por el consejo Sergio. >>>>> >>>>> ¿Cómo podría forzar a que el script / app fuera obligado a utilizar >>>>> Unicode? >>>>> >>>>> Saludos ;-) >>>>> >>>>> On Wed, 31 Oct 2018 at 13:44, Sergio Fernández >>>>> wrote: >>>>> >>>>>> Utiliza siempre un encoding independiente de la plataforma que >>>>>> soporte el juego de caracteres que necesitas. Unicode es tu amigo ;-) >>>>>> >>>>>> On Wed, Oct 31, 2018 at 5:36 AM Pixu Kideak >>>>>> wrote: >>>>>> >>>>>>> Hola, >>>>>>> >>>>>>> Estoy trabajando en un entorno Windows con Python 3.7 y según veo en >>>>>>> el encoding utilizo cp1252 - windows -1252 Western Europe. >>>>>>> >>>>>>> Quiero obtener información de una web con caracteres rusos y guardar >>>>>>> la información en un fichero CSV. >>>>>>> >>>>>>> Según he visto el encoding necesario es cp1251 - windows - 1251 - >>>>>>> Bulgarian, Byelorussian, Macedonian, Russian, Serbian. >>>>>>> >>>>>>> Pero no sé cómo puedo usarlo desde Python o qué debo hacer para >>>>>>> poder grabar la información correctamente en el fichero CSV. >>>>>>> >>>>>>> ¿Alguien me podría mostrar algo de luz? >>>>>>> >>>>>>> Un saludo ;-) >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es en python.org >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Sergio Fernández >>>>>> http://www.wikier.org >>>>>> _______________________________________________ >>>>>> 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 >>>>> >>>> >>>> >>>> -- >>>> Sergio Fernández >>>> http://www.wikier.org >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es en python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> >>> >>> >>> -- >>> -- >>> Àngel Lis. >>> _______________________________________________ >>> 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 > -- -- Àngel Lis. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From jcaballero.hep en gmail.com Mon Nov 26 17:29:37 2018 From: jcaballero.hep en gmail.com (Jose Caballero) Date: Mon, 26 Nov 2018 17:29:37 -0500 Subject: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging Message-ID: Hola, tengo una clase C, a cuyos objetos puedo, en principio, hacer copias con copy.deepcopy(). Sin embargo, cuando a la clase C le agrego logging en el __init__ [1], ya no funciona [2]. ?No me queda mas remedio que copiar el objeto "manualmente"? ?O existe alguna forma limpia de evitar este problema? Gracias por adelantado. Un saludo, y perdon por la falta de tildes. Jose [1] def __init__(self): self.log = logging.getLogger() logStream = logging.StreamHandler() .... self.log.addHandler(logStream) [2] File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct state = deepcopy(state, memo) File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct state = deepcopy(state, memo) File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/lib64/python2.7/copy.py", line 230, in _deepcopy_list y.append(deepcopy(a, memo)) File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct state = deepcopy(state, memo) File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct state = deepcopy(state, memo) File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/lib64/python2.7/copy.py", line 329, in _reconstruct y = callable(*args) File "/usr/lib64/python2.7/copy_reg.py", line 93, in __newobj__ return cls.__new__(cls, *args) TypeError: object.__new__(thread.lock) is not safe, use thread.lock.__new__() From anlismon en gmail.com Tue Nov 27 02:12:37 2018 From: anlismon en gmail.com (Angel Lis) Date: Tue, 27 Nov 2018 08:12:37 +0100 Subject: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging In-Reply-To: References: Message-ID: Hola Jose, el problema que describes es la razon de por que existe el metodo copy.copy() y copy.deepcopy() de la documentacion: https://docs.python.org/2.7/library/copy.html """ - A *shallow copy* constructs a new compound object and then (to the extent possible) inserts *references* into it to the objects found in the original. - A *deep copy* constructs a new compound object and then, recursively, inserts *copies* into it of the objects found in the original. """ Y para el objeto logging: https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety """ The logging module is intended to be thread-safe without any special work needing to be done by its clients. It achieves this though using threading locks; there is one lock to serialize access to the module?s shared data, and each handler also creates a lock to serialize access to its underlying I/O. """ En este caso, probablemente deberas usar un copy() en vez de deepcopy. Espero haberte ayudado. Un saludo. PD: Yo tampoco tengo tildes en el teclado El lun., 26 nov. 2018 a las 23:30, Jose Caballero () escribió: > Hola, > > tengo una clase C, a cuyos objetos puedo, en principio, hacer copias > con copy.deepcopy(). > Sin embargo, cuando a la clase C le agrego logging en el __init__ [1], > ya no funciona [2]. > ?No me queda mas remedio que copiar el objeto "manualmente"? > ?O existe alguna forma limpia de evitar este problema? > > Gracias por adelantado. > Un saludo, y perdon por la falta de tildes. > Jose > > > [1] > def __init__(self): > self.log = logging.getLogger() > logStream = logging.StreamHandler() > .... > self.log.addHandler(logStream) > > [2] > File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy > y = _reconstruct(x, rv, 1, memo) > File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct > state = deepcopy(state, memo) > File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy > y = copier(x, memo) > File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict > y[deepcopy(key, memo)] = deepcopy(value, memo) > File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy > y = _reconstruct(x, rv, 1, memo) > File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct > state = deepcopy(state, memo) > File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy > y = copier(x, memo) > File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict > y[deepcopy(key, memo)] = deepcopy(value, memo) > File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy > y = copier(x, memo) > File "/usr/lib64/python2.7/copy.py", line 230, in _deepcopy_list > y.append(deepcopy(a, memo)) > File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy > y = _reconstruct(x, rv, 1, memo) > File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct > state = deepcopy(state, memo) > File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy > y = copier(x, memo) > File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict > y[deepcopy(key, memo)] = deepcopy(value, memo) > File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy > y = _reconstruct(x, rv, 1, memo) > File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct > state = deepcopy(state, memo) > File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy > y = copier(x, memo) > File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict > y[deepcopy(key, memo)] = deepcopy(value, memo) > File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy > y = _reconstruct(x, rv, 1, memo) > File "/usr/lib64/python2.7/copy.py", line 329, in _reconstruct > y = callable(*args) > File "/usr/lib64/python2.7/copy_reg.py", line 93, in __newobj__ > return cls.__new__(cls, *args) > TypeError: object.__new__(thread.lock) is not safe, use > thread.lock.__new__() > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- -- Àngel Lis. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From pych3m4 en gmail.com Wed Nov 28 03:43:36 2018 From: pych3m4 en gmail.com (Chema Cortes) Date: Wed, 28 Nov 2018 09:43:36 +0100 Subject: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging In-Reply-To: References: Message-ID: El mar., 27 nov. 2018 a las 8:13, Angel Lis () escribió: > Hola Jose, > el problema que describes es la razon de por que existe el metodo > copy.copy() y copy.deepcopy() > de la documentacion: > > https://docs.python.org/2.7/library/copy.html > > """ > > - A *shallow copy* constructs a new compound object and then (to the > extent possible) inserts *references* into it to the objects found in > the original. > - A *deep copy* constructs a new compound object and then, > recursively, inserts *copies* into it of the objects found in the > original. > > > """ > > Y para el objeto logging: > > > https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety > """ > The logging module is intended to be thread-safe without any special work > needing to be done by its clients. It achieves this though using threading > locks; there is one lock to serialize access to the module?s shared data, > and each handler also creates a lock to serialize access to its underlying > I/O. > """ > > En este caso, probablemente deberas usar un copy() en vez de deepcopy. > Espero haberte ayudado. > > El módulo 'logging' usa locks para bloquear los hilos que no es conveniente duplicar, de ahí que saque el error. Aún así, se puede aprovechar el funcionamiento que tiene 'deepcopy' para evitar duplicar componentes que ya ha copiado en su intento de replicar toda la estructura de un objeto. Tiene un segundo argumento para pasarle el diccionario con el que "*memoizar*" los componentes ya duplicados. Si a este argumento añadimos aquellos componentes que no queremos duplicar ya debería funcionar: c = C() mem = { id(c.log): c.log } x = copy.deepcopy(c) id(c) == id(x) # False id(c.log) == id(x.log) # True > Un saludo. > > PD: Yo tampoco tengo tildes en el teclado > > El lun., 26 nov. 2018 a las 23:30, Jose Caballero (< > jcaballero.hep en gmail.com>) escribió: > >> Hola, >> >> tengo una clase C, a cuyos objetos puedo, en principio, hacer copias >> con copy.deepcopy(). >> Sin embargo, cuando a la clase C le agrego logging en el __init__ [1], >> ya no funciona [2]. >> ?No me queda mas remedio que copiar el objeto "manualmente"? >> ?O existe alguna forma limpia de evitar este problema? >> >> Gracias por adelantado. >> Un saludo, y perdon por la falta de tildes. >> Jose >> >> >> [1] >> def __init__(self): >> self.log = logging.getLogger() >> logStream = logging.StreamHandler() >> .... >> self.log.addHandler(logStream) >> >> [2] >> File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy >> y = _reconstruct(x, rv, 1, memo) >> File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct >> state = deepcopy(state, memo) >> File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy >> y = copier(x, memo) >> File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict >> y[deepcopy(key, memo)] = deepcopy(value, memo) >> File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy >> y = _reconstruct(x, rv, 1, memo) >> File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct >> state = deepcopy(state, memo) >> File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy >> y = copier(x, memo) >> File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict >> y[deepcopy(key, memo)] = deepcopy(value, memo) >> File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy >> y = copier(x, memo) >> File "/usr/lib64/python2.7/copy.py", line 230, in _deepcopy_list >> y.append(deepcopy(a, memo)) >> File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy >> y = _reconstruct(x, rv, 1, memo) >> File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct >> state = deepcopy(state, memo) >> File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy >> y = copier(x, memo) >> File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict >> y[deepcopy(key, memo)] = deepcopy(value, memo) >> File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy >> y = _reconstruct(x, rv, 1, memo) >> File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct >> state = deepcopy(state, memo) >> File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy >> y = copier(x, memo) >> File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict >> y[deepcopy(key, memo)] = deepcopy(value, memo) >> File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy >> y = _reconstruct(x, rv, 1, memo) >> File "/usr/lib64/python2.7/copy.py", line 329, in _reconstruct >> y = callable(*args) >> File "/usr/lib64/python2.7/copy_reg.py", line 93, in __newobj__ >> return cls.__new__(cls, *args) >> TypeError: object.__new__(thread.lock) is not safe, use >> thread.lock.__new__() >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > > > -- > -- > Àngel Lis. > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- 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 jcaballero.hep en gmail.com Wed Nov 28 07:26:40 2018 From: jcaballero.hep en gmail.com (Jose Caballero) Date: Wed, 28 Nov 2018 07:26:40 -0500 Subject: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging In-Reply-To: References: Message-ID: <23673A37-E396-4A3C-9663-691CD5210F82@gmail.com> On Nov 28, 2018, at 3:43, Chema Cortes wrote: > > > El mar., 27 nov. 2018 a las 8:13, Angel Lis () escribió: > Hola Jose, > el problema que describes es la razon de por que existe el metodo copy.copy() y copy.deepcopy() > de la documentacion: > > https://docs.python.org/2.7/library/copy.html > > """ > A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original. > A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original. > > """ > > Y para el objeto logging: > > https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety > """ > The logging module is intended to be thread-safe without any special work needing to be done by its clients. It achieves this though using threading locks; there is one lock to serialize access to the module?s shared data, and each handler also creates a lock to serialize access to its underlying I/O. > """ > > En este caso, probablemente deberas usar un copy() en vez de deepcopy. > Espero haberte ayudado. > > > El módulo 'logging' usa locks para bloquear los hilos que no es conveniente duplicar, de ahí que saque el error. > > Aún así, se puede aprovechar el funcionamiento que tiene 'deepcopy' para evitar duplicar componentes que ya ha copiado en su intento de replicar toda la estructura de un objeto. Tiene un segundo argumento para pasarle el diccionario con el que "memoizar" los componentes ya duplicados. Si a este argumento añadimos aquellos componentes que no queremos duplicar ya debería funcionar: > > c = C() > mem = { id(c.log): c.log } > x = copy.deepcopy(c) > > id(c) == id(x) # False > id(c.log) == id(x.log) # True > > > Muchas gracias a los dos. Un saludo, Jose ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From pych3m4 en gmail.com Thu Nov 29 06:09:35 2018 From: pych3m4 en gmail.com (Chema Cortes) Date: Thu, 29 Nov 2018 12:09:35 +0100 Subject: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging In-Reply-To: References: Message-ID: El mié., 28 nov. 2018 a las 9:43, Chema Cortes () escribió: > > > El mar., 27 nov. 2018 a las 8:13, Angel Lis () > escribió: > >> Hola Jose, >> el problema que describes es la razon de por que existe el metodo >> copy.copy() y copy.deepcopy() >> de la documentacion: >> >> https://docs.python.org/2.7/library/copy.html >> >> """ >> >> - A *shallow copy* constructs a new compound object and then (to the >> extent possible) inserts *references* into it to the objects found in >> the original. >> - A *deep copy* constructs a new compound object and then, >> recursively, inserts *copies* into it of the objects found in the >> original. >> >> >> """ >> >> Y para el objeto logging: >> >> >> https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety >> """ >> The logging module is intended to be thread-safe without any special >> work needing to be done by its clients. It achieves this though using >> threading locks; there is one lock to serialize access to the module?s >> shared data, and each handler also creates a lock to serialize access to >> its underlying I/O. >> """ >> >> En este caso, probablemente deberas usar un copy() en vez de deepcopy. >> Espero haberte ayudado. >> >> > El módulo 'logging' usa locks para bloquear los hilos que no es > conveniente duplicar, de ahí que saque el error. > > Aún así, se puede aprovechar el funcionamiento que tiene 'deepcopy' para > evitar duplicar componentes que ya ha copiado en su intento de replicar > toda la estructura de un objeto. Tiene un segundo argumento para pasarle el > diccionario con el que "*memoizar*" los componentes ya duplicados. Si a > este argumento añadimos aquellos componentes que no queremos duplicar ya > debería funcionar: > > c = C() > mem = { id(c.log): c.log } > x = copy.deepcopy(c) > > id(c) == id(x) # False > id(c.log) == id(x.log) # True > > Me había dejado el diccionario como segundo argumento: c = C() mem = { id(c.log): c.log } x = copy.deepcopy(c, mem) -- 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: