En nuestro caso, la ruta final es el resultado de la unión del nombre del directorio de salida con el nombre del archivo de salida. Por ejemplo, si el nombre del directorio de salida es out_dir_name = 'outdir' y el del archivo de entrada es file_name = '20110315.data', obtenemos:
Si, en lugar de utilizar os.path.join(), hubiéramos unido las rutas insertando el separador específico de nuestro sistema operativo, el script no habría sido portable, es decir, no habríamos podido ejecutarlo del mismo modo en todos los sistemas operativo. Para entendernos, si hubiéramos creado la ruta de este modo:
utilizando el separador específico de los sistemas Windows, nuestro programa no habría funcionado correctamente en los sistemas Unix-like. Consideremos, por ejemplo, el siguiente script:
Cuando lo ejecutamos en Windows, este crea un directorio de nombre out, para crear a continuación en su interior el archivo myfile.dataout. Sin embargo, la ruta pasada a open() utiliza el separador específico de Windows, por lo que el script no es portable. De hecho, en un sistema Unix-like no se crea un archivo myfile.dataout dentro del directorio out, sino un archivo out\myfile.dataout en el directorio actual:
Es muy importante conocer el módulo os, puesto que proporciona múltiples herramientas que nos permiten escribir programas portables.
NOTA
El objeto al que hace referencia os.path es un módulo, que es distinto según el sistema operativo en uso. Por ejemplo, en los sistemas Unix-like os.path se refiere al módulo posixpath:
mientras que en los sistemas Windows se refiere al módulo ntpath:
Por tanto, si llamamos a la función os.path.join() desde un sistema Unix- like, en realidad la función que estamos llamando es posixpath.path.join(), mientras que si llamamos a os.path.join() desde un sistema Windows, estamos llamando realmente a la función ntpath.path.join().
Acabamos esta introducción al módulo os con un consejo: leed la documentación online del sitio oficial, que encontraréis en la página http://docs.python.org/3/library/ os.html.
Listas por comprensión
El bucle for más interno itera en las líneas del archivo. Para cada línea se crea una lista de los elementos convertidos en float:
La expresión [float(item) for item in line.split()] es una lista por comprensión. Si ha cemos memoria, recordaremos que ya hemos hablado de ella en la sección La función integrada help() y las cadenas de documentación, en la cual hemos dicho que es una expresión que permite crear una lista con una sintaxis elegante y compacta. Retomemos de nuevo el argumento, dejando para el Capítulo 2 un trato más detallado.
Vamos a intentar entender qué hace exactamente nuestra lista por comprensión, partiendo del método line.split():
Como podemos ver, line.split() devuelve una lista de los elementos de la cadena de texto. Sin embargo, esta lista no puede ser utilizada para calcular una suma, porque sus elementos son cadenas y no números:
Por tanto, es preciso obtener una lista cuyos elementos sean float y no str. Una solución podría ser la siguiente:
En cambio, la solución que hemos adoptado en nuestro script utiliza una lista por comprensión y, como podemos ver, es mucho más compacta y elegante que la anterior:
Su sintaxis es autoexplicativa: cada elemento item de line.split() se convierte en float y se inserta en la lista.
Expresiones de formato de las cadenas de texto
Todavía nos falta una pieza para completar el rompecabezas:
NOTA
A partir de Python 3.4, la mejor manera de calcular la media es utilizando la función mean() del módulo statistics. Para más información, consultad la documentación oficial, en la página http://docs.python.org/3/library/statistics.html.
El símbolo % en el interior de una cadena se muestra de por sí como el resto de los caracteres:
Sin embargo, si la cadena es seguida por un símbolo % que, a su vez, es seguido por un literal o una etiqueta, el %f en el interior de la cadena tiene un significado especial:
Como podemos ver, el %f ha sido sustituido respectivamente por el literal y por la etiqueta que siguen al símbolo % fuera de la cadena. El carácter f indica que el literal o la etiqueta se convertirán en float:
También es posible especificar el número de las cifras decimales a visualizar. Para ello, se ubica el .numero_cifre delante de la f, como se muestra a continuación:
Si queremos dar formato a más objetos a la vez, debemos agruparlos en una tupla detrás del símbolo % fuera de la cadena, como se muestra a continuación:
Además de la aplicación de formato con conversión en float mediante %f, también es posible utilizar otras codificaciones. Por ejemplo, %d convierte en entero, %s, en cadena, entre otros. Veremos todos los posibles modos de formato de las cadenas en el Capítulo 2.
Si releemos el script dataout.py, nos daremos cuenta de que todo aquello que inicialmente nos parecía incomprensible ahora ya tiene sentido.
Ahora que tenemos una visión de conjunto del lenguaje, podemos afrontar con soltura los próximos capítulos.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно