<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Conocimiento Abierto &#187; python</title>
	<atom:link href="http://conocimientoabierto.es/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://conocimientoabierto.es</link>
	<description></description>
	<lastBuildDate>Sat, 04 Feb 2012 15:34:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Python Scripting for Students of Remote Sensing</title>
		<link>http://conocimientoabierto.es/python-scripting-for-students-of-remote-sensing/391/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-scripting-for-students-of-remote-sensing</link>
		<comments>http://conocimientoabierto.es/python-scripting-for-students-of-remote-sensing/391/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 15:14:35 +0000</pubDate>
		<dc:creator>fpuga</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[desarrollo sofware]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[teledetección]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://conocimientoabierto.es/?p=391</guid>
		<description><![CDATA[Python Scripting for Students of Remote Sensing es un manual de python orientado a la teledetección. Si no sabes nada de python es mejor empezar por otro manual y luego saltar directamente al capítulo 5, &#8220;Plottin&#8221;. La parte de python en &#8230; <a href="http://conocimientoabierto.es/python-scripting-for-students-of-remote-sensing/391/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.landmap.ac.uk/index.php/Learning-Materials/Python-Scripting/Python-Scripting-for-Students-of-Remote-Sensing/menu-id-100767.html">Python Scripting for Students of Remote Sensing</a> es un manual de python orientado a la teledetección. Si no sabes nada de python es mejor empezar por otro manual y luego saltar directamente al capítulo 5, &#8220;Plottin&#8221;. La parte de python en sí es muy básica y no está muy bien explicada. Del capítulo 5 al 10 se muestran algunas librerías interesantes de python para mostrar gráficos (matplotlib), para estadística y calculos científicos (numpy), para procesado de raster (gdal), o ejemplos sencillos de trabajo con datos lidar en ficheros ascii. La información que dan es bastante escueta, pero si ya conoces python en un par de horas puedes leerlo para hacerte una idea de que posibilidades hay en estos campos.</p>
<p>En la misma página se pueden encontrar otros manuales interesantes sobre teledetección.</p>
<p>Descubrí el curso gracias al <a href="http://conocimientoabierto.es/curso-objetivo-programacao-python/325/comment-page-1/#comment-15182">comentario</a> de <a href="http://joseguerreroa.wordpress.com/">José Guerrero</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://conocimientoabierto.es/python-scripting-for-students-of-remote-sensing/391/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um curso objetivo de programação em Python</title>
		<link>http://conocimientoabierto.es/curso-objetivo-programacao-python/328/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=curso-objetivo-programacao-python</link>
		<comments>http://conocimientoabierto.es/curso-objetivo-programacao-python/328/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 07:04:09 +0000</pubDate>
		<dc:creator>fpuga</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[desarrollo sofware]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://conocimientoabierto.es/?p=325</guid>
		<description><![CDATA[Gracias al blog de Anderson Medeiros encuentro un interesante tutorial de python escrito en Portugués pero muy facilito de seguir. Es un tutorial de introducción, rápido de leer y que me ha ayudado a recordar algunos de esos conceptos que &#8230; <a href="http://conocimientoabierto.es/curso-objetivo-programacao-python/328/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Gracias al blog de <a href="http://andersonmedeiros.wordpress.com/2010/06/13/curso-online-de-python/trackback/">Anderson Medeiros</a> encuentro un <a href="http://www.async.com.br/projects/python/pnp/node20.html">interesante tutorial de python escrito en Portugués</a> pero muy facilito de seguir.</p>
<p>Es un tutorial de introducción, rápido de leer y que me ha ayudado a recordar algunos de esos conceptos que por estar más habituado a otros lenguajes tipo Java no empleas a menudo.</p>
<p>Algunas cosillas que he recordado, aprendido o me han gustado.</p>
<h3>Listas, tupas y strings</h3>
<p>Explica bien que son <a href="http://www.async.com.br/projects/python/pnp/node13.html">listas, tuplas, diccionarios y strings</a>. A listas y tuplas se las llama en ocasiones secuencias puesto que sus propiedades son muy parecidas. Una tupla es en realidad una lista inmutable.</p>
<p>Conviene tener en la cabeza lo fácil que es hacer slices (subconjuntos de secuencias) y substrings en python, incluso empleando índices negativos para empezar a contar por el final. LLega con escribir:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;gt;&amp;gt;&amp;gt; lista = ['a', 'b', 'c', 'd', 'e', 'f', 'g']<br />
&amp;gt;&amp;gt;&amp;gt; lista[2:5]<br />
['c', 'd', 'e']<br />
&amp;gt;&amp;gt;&amp;gt; &nbsp;lista[2:]<br />
['c', 'd', 'e', 'f', 'g']<br />
&amp;gt;&amp;gt;&amp;gt; lista[:5]<br />
['a', 'b', 'c', 'd', 'e']<br />
&amp;gt;&amp;gt;&amp;gt; lista[:-2]<br />
['a', 'b', 'c', 'd', 'e']<br />
&amp;gt;&amp;gt;&amp;gt; lista[-2:]<br />
['f', 'g']</div></div>
<p>Los operadores * y + se pueden usar sobre listas, tuplas y strings. * replica n veces el elemento y + concatena.</p>
<p>Ejemplo para strings:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;gt;&amp;gt;&amp;gt; a = &quot;exato&quot;<br />
&amp;gt;&amp;gt;&amp;gt; print a * 2<br />
exatoexato<br />
&amp;gt;&amp;gt;&amp;gt; print &quot;quase &quot; + a<br />
quase exato</div></div>
<p>Ejemplo para listas:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;gt;&amp;gt;&amp;gt; a = [-1, 0]<br />
&amp;gt;&amp;gt;&amp;gt; b = [1, 2, 3]<br />
&amp;gt;&amp;gt;&amp;gt; print b * 3<br />
[1, 2, 3, 1, 2, 3, 1, 2, 3]<br />
&amp;gt;&amp;gt;&amp;gt; print a + b<br />
[-1, 0, 1, 2, 3]</div></div>
<p>Para chequear si un elemento está contenido en una secuencia o diccionario se usa el operador in</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;gt;&amp;gt;&amp;gt; &quot;x&quot; in &quot;cha&quot;<br />
False<br />
&amp;gt;&amp;gt;&amp;gt; 1 in [1,2,3]<br />
True</div></div>
<h3>Combinar de forma implícita operaciones lógicas</h3>
<p>Además de los operadores lógicos not, or, and python permite <a href="http://www.async.com.br/projects/python/pnp/op-logical.html#SECTION000345100000000000000">combinar ciertas operaciones lógicas de forma implícita</a>:</p>
<p>Por ejemplo podemos comprobar un número está en un determinado rango de esta forma:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a = 5<br />
if 3 &amp;lt; a &amp;lt; 9:<br />
&nbsp; &nbsp; &nbsp;print &amp;quot;Entre 3 y 9&amp;quot;<br />
<br />
a = 3; b = 3; c = 2;<br />
if a == b &amp;lt;= c:<br />
&nbsp; &nbsp; &nbsp;print &amp;quot;a igual a b y b menor o igual que c&amp;quot;</div></div>
<h3>Clausula else en bloques for y while</h3>
<p>En los for y los while <a href="http://www.async.com.br/projects/python/pnp/node28.html#SECTION000352200000000000000">se puede emplear una claúsula else</a> que se ejecutará cuando se salga del bloque de iteración por haber acabado la secuencia (en lugar de salir por un break)</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">valores = [2, 4, 5, 2, -1]<br />
for i in valores:<br />
&nbsp; &nbsp; &nbsp; &nbsp; if i &amp;lt; 0:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &amp;quot;Negativo encontrado: %d&amp;quot; %i<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break<br />
else:<br />
&nbsp; &nbsp; &nbsp; &nbsp; print &amp;quot;Nenhum negativo encontrado&amp;quot;</div></div>
<h3>Valores booleanos</h3>
<p>No está de más recordar que <a href="http://www.async.com.br/projects/python/pnp/node29.html#SECTION000353100000000000000">en python se considera falso</a> a:</p>
<ul>
<li>el booleano False</li>
<li>el valor 0 (zero)</li>
<li>una lista, diccionario, tupla o string vacios (de tamaño cero)</li>
<li>el valor especial None</li>
</ul>
<p>Así por ejemplo para comprobar si una lista no está vacía mejor que emplear</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lista = ['a']<br />
if (len(lista)) != 0:<br />
&nbsp; &nbsp; &nbsp; print &quot;forma poco apropiada de comprobar si una lista no está vacia&quot;</div></div>
<p>usaremos directamente</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">if lista:<br />
&nbsp; &nbsp; &nbsp; print &quot;Lista no vacia&quot;</div></div>
<h3>Argumentos de funciones</h3>
<p>Existen <a href="http://www.async.com.br/projects/python/pnp/node33.html#SECTION000362300000000000000">dos formas de pasar un número variable de argumentos a una función</a>:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">def desculpa(alvo, *motivos):<br />
&nbsp; &nbsp; &nbsp; &nbsp; d = &quot;Desculpas %s, mas estou doente&quot; % alvo<br />
&nbsp; &nbsp; &nbsp; &nbsp; for motivo in motivos:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d = d + &quot; e %s&quot; % motivo<br />
&nbsp; &nbsp; &nbsp; &nbsp; return d + &quot;.&quot;<br />
<br />
&nbsp; &nbsp; &amp;gt;&amp;gt;&amp;gt; desculpa(&quot;senhor&quot;, &quot;meu gato fugiu&quot;, <br />
&nbsp; &nbsp; ... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;minha tia veio visitar&quot;)</div></div>
<p>o bien</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;def equipe(diretor, produtor, **atores):<br />
&nbsp; &nbsp; &nbsp; &nbsp; for personagem in atores.keys():<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &quot;%s: %s&quot; % (personagem, atores[personagem])<br />
&nbsp; &nbsp; &nbsp; &nbsp; print &quot;-&quot; * 20<br />
&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Diretor: &nbsp;%s&quot; % diretor<br />
&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Produtor: %s&quot; % produtor<br />
<br />
&nbsp; &nbsp; &amp;gt;&amp;gt;&amp;gt; equipe(diretor=&quot;Paul Anderson&quot;, <br />
&nbsp; &nbsp; ... &nbsp; &nbsp; &nbsp; &nbsp;produtor=&quot;Paul Anderson&quot;, <br />
&nbsp; &nbsp; ... &nbsp; &nbsp; &nbsp; &nbsp;Frank=&quot;Tom Cruise&quot;, Edmund=&quot;Pat Healy&quot;, <br />
&nbsp; &nbsp; ... &nbsp; &nbsp; &nbsp; &nbsp;Linda=&quot;Julianne Moore&quot;)<br />
<br />
&nbsp; &nbsp; Frank: Tom Cruise<br />
&nbsp; &nbsp; Edmund: Pat Healy<br />
&nbsp; &nbsp; Linda: Julianne Moore<br />
&nbsp; &nbsp; --------------------<br />
&nbsp; &nbsp; Diretor: Paul Anderson<br />
&nbsp; &nbsp; Produtor: Paul Anderson</div></div>
<p>Si tienes algún tutoirial de python que te haya gustado o algún truquillo que quieres compartir deja un comentario.</p>
]]></content:encoded>
			<wfw:commentRss>http://conocimientoabierto.es/curso-objetivo-programacao-python/328/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Traducir automáticamente ficheros .po</title>
		<link>http://conocimientoabierto.es/traducir-automaticamente-ficheros-po/207/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=traducir-automaticamente-ficheros-po</link>
		<comments>http://conocimientoabierto.es/traducir-automaticamente-ficheros-po/207/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 22:43:02 +0000</pubDate>
		<dc:creator>fpuga</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[poss-gl]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[traducción]]></category>

		<guid isPermaLink="false">http://conocimientoabierto.es/?p=207</guid>
		<description><![CDATA[Ultimamente estoy dedicando parte de mi tiempo libre a algunos trabajos relacionados con la traducción. En concreto he portado a windows la última versión del software de traducción gtranslator y estoy participando en un proyecto para traducir de forma colaborativa &#8230; <a href="http://conocimientoabierto.es/traducir-automaticamente-ficheros-po/207/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ultimamente estoy dedicando parte de mi tiempo libre a algunos trabajos relacionados con la traducción. En concreto he portado a windows la última versión del <a href="http://gtranslator.sourceforge.net/">software de traducción gtranslator</a> y estoy participando en un proyecto para <a href="http://producingoss.ghandalf.org/">traducir de forma colaborativa al gallego el libro Producing Open Source Software</a>.</p>
<p>Uno de los aspectos interesantes del proyecto poss-gl es que estamos usando una metodología propia de la traducción de software para un libro, con bastante buen resultado. Cada capítulo del libro se ha convertido en un <a href="http://es.wikipedia.org/wiki/Gettext">fichero .po</a>, que son los ficheros estándar de traducción en Software Libre. De este modo en lugar de ir traduciendo cada línea con un procesador de texto podemos emplear una herramienta avanzada como gtranslator para ello. Una de las características de gtranslator es que se puede visualizar además del texto original el contenido de otro fichero .po que contenga por ejemplo la traducción a un tercer idioma que nos sirva para comparar como han hecho otros traductores.</p>
<p>Basándome en esa posibilidad acabo de escribir un programita que permite traducir automaticamente un fichero po haciendo consultas a un <a href="http://www.opentrad.com/">servicio de traducción web</a>. Las traducciones automáticas, a no ser que sean entre lenguas similares como castellano y gallego, son bastante malas pero, cargándolas como idioma alternativo en gtranslator pueden sernos de ayuda en nuestra propia traducción.</p>
<p>El programa se trata de un script programado en python y liberado con licencia GPL v3 que podeis <a href="http://repo.or.cz/w/fpuga.git/blob_plain/HEAD:/localizacion/translatePO.py">descargar directamente</a> desde <a href="http://repo.or.cz/w/fpuga.git">mi repositorio de software</a>. Para que funcione es necesario instalar también los módulos de python <a href="http://bitbucket.org/izi/polib/src/">polib</a> y <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>.</p>
<p>Para ejecutarlo escribiremos en una consola de linux:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">python translatePO.py -d [dirección] -i [fichero.po]</div></div>
<p>La dirección indica de que idioma a que idioma queremos traducirlo, por ejemplo en-es para traducir de inglés a castellano o gl-fr para hacerlo de gallego a francés.</p>
]]></content:encoded>
			<wfw:commentRss>http://conocimientoabierto.es/traducir-automaticamente-ficheros-po/207/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

