{"id":2189,"date":"2020-07-04T13:01:21","date_gmt":"2020-07-04T18:01:21","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2189"},"modified":"2020-07-04T13:01:21","modified_gmt":"2020-07-04T18:01:21","slug":"leer-archivos-en-python-por-linea-palabra","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/leer-archivos-en-python-por-linea-palabra\/","title":{"rendered":"Leer archivos en Python por l\u00ednea y por palabra"},"content":{"rendered":"<p>Veremos c\u00f3mo leer archivos en Python para analizarlo por l\u00ednea o por palabra. Mostramos un ejemplo de c\u00f3mo encontrar la l\u00ednea m\u00e1s larga de un archivo.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2198 size-full\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python.png\" alt=\"Leer archivos en Python\" width=\"1200\" height=\"750\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python.png 1200w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python-300x188.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python-768x480.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/07\/Leer-archivo-en-Python-1024x640.png 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/p>\n<p>\u00c9ste art\u00edculo tambi\u00e9n est\u00e1 explicado en video. M\u00edralo aqu\u00ed:\u00a0<a href=\"https:\/\/youtu.be\/5bA0rO8yd8E\" target=\"_blank\" rel=\"noopener\">https:\/\/youtu.be\/5bA0rO8yd8E<\/a><\/p>\n<p>Mucha de la informaci\u00f3n disponible para el An\u00e1lisis de datos est\u00e1 disponible en archivos de texto.<\/p>\n<p>Para leer archivos de texto en Python usamos alguno de los siguientes 3 procedimientos, donde guardamos los datos en&#8230;<\/p>\n<p>1. &#8230; una lista, donde cada elemento es una linea del archivo<br \/>\n2. &#8230; una lista, donde cada elemento es una palabra del archivo<br \/>\n3. &#8230; una multilista, donde cada elemento es una lista que contiene una linea del archivo y donde cada elemento de esa sublista es una palabra del archivo.<\/p>\n<p>El m\u00e9todo a utilizar depender\u00e1 de la forma en c\u00f3mo queramos analizar los datos.<\/p>\n<p>Veamos el primer procedimiento.<\/p>\n<h2>Leer archivos en Python: Guardar lineas completas en una lista<\/h2>\n<p>C\u00f3digo en Python:<\/p>\n<pre class=\"lang:python decode:true\">print (\"+++ 1 ++++\")\r\ndatos = []\r\nwith open(\"datos.txt\") as fname:\r\n\tlineas = fname.readlines()\r\n\tfor linea in lineas:\r\n\t\tdatos.append(linea.strip('\\n'))\r\nprint (datos)\r\nprint (\"+++\")<\/pre>\n<p>Vamos a guardar las lineas en una <a href=\"https:\/\/naps.com.mx\/blog\/listas-en-python\/\">lista<\/a> llamada datos. Abrimos el archivo con <em>with open(\u00abdatos.txt\u00bb)<\/em> <em>as fname<\/em>, donde \u00abdatos.txt\u00bb es el nombre del archivo. Ahora tenemos una variable llamada <em>fname<\/em> apuntando al contenido del archivo. Utilizamos el m\u00e9todo <em>readlines()<\/em> para leer todas las lineas. Si aqu\u00ed imprimimos la lista lineas veremos que tambi\u00e9n extrajo el car\u00e1cter de salto de l\u00ednea. Usando un <a href=\"https:\/\/naps.com.mx\/blog\/uso-de-for-en-python-usando-listas\/\"><em>for<\/em><\/a>, recorremos toda la lista para quitar (<em>strip<\/em>) el caracter de salto de l\u00ednea (&#8216;\\n&#8217;). El resultado es una lista donde cada elemento es una l\u00ednea del archivo.<\/p>\n<h2>Leer archivos en Python: Guardar cada palabra como un elemento de una lista<\/h2>\n<p>C\u00f3digo en Python:<\/p>\n<pre class=\"lang:python decode:true \">print (\"*** 2 ***\")\r\ndatos2 = []\r\nwith open(\"datos.txt\") as fname:\r\n\tfor lineas in fname:\r\n\t\tdatos2.extend(lineas.split())\r\n\t\tprint (\"i\" , datos2)\r\nprint (datos2)\r\nprint (\"***\")<\/pre>\n<p>En \u00e9ste caso abrimos el archivo de la misma forma como lo hicimos en el procedimiento anterior. Recorremos el objeto <em>fname<\/em> directamente con un <em>for<\/em>. Usamos <em>lineas.split()<\/em> para separar cada linea usando el caracter de espacio en blanco, por lo que obtenemos una lista donde cada elemento es una de las palabras de esa l\u00ednea.\u00a0Usamos el m\u00e9todo\u00a0<em>extend<\/em> para copiar todo el contenido de esa lista de palabras a otra lista llamada datos2. Al final obtenemos una lista donde cada elemento es una palabra del archivo.<\/p>\n<h2>Leer archivos en Python: Guardar en multilistas<\/h2>\n<p>C\u00f3digo en Python:<\/p>\n<pre class=\"lang:python decode:true \">print (\"*** 3 ***\")\r\ndatos3 = []\r\nwith open(\"datos.txt\") as fname:\r\n\tfor lineas in fname:\r\n\t\tdatos3.append(lineas.split())\r\nprint (datos3)\r\nprint (\"***\")<\/pre>\n<p>\u00c9ste procedimiento es muy similar al anterior, solo cambiamos el m\u00e9todo <em>extend<\/em> por <em>append<\/em>. Son embargo, el resultado s\u00ed es bastante diferente: cada l\u00ednea del archivo de texto se guarda en una lista donde cada elemento es una palabra. Entonces tenemos todo el archivo en una <a href=\"https:\/\/naps.com.mx\/blog\/multilistas-en-python-listas-de-listas\/\">multilista<\/a> donde cada elemento es una lista que contiene todas las palabras de una fila.<\/p>\n<h2>Ejemplo: Encontrarla l\u00ednea m\u00e1s larga de un archivo<\/h2>\n<p>C\u00f3digo en Python:<\/p>\n<pre class=\"lang:python decode:true\">def linea_mas_larga(nombre):\r\n\twith open(nombre) as fname:\r\n\t\tlineas = [linea.strip('\\n') for linea in fname.readlines()]\r\n\tlmaslarga = lineas[0]\r\n\tfor linea in lineas:\r\n\t\tif len(linea) &gt; len(lmaslarga):\r\n\t\t\tlmaslarga = linea\r\n\treturn lmaslarga\r\n\r\nprint (\"------\")\r\nprint (\"La linea con mayor longitud es: \")\r\nprint (linea_mas_larga(\"datos.txt\"))<\/pre>\n<p>Explicaci\u00f3n: Usamos el primero de los tres procedimientos descritos arriba. Para simplificar usamos una expresi\u00f3n generadora. En vez de:<\/p>\n<pre class=\"lang:python decode:true\">for linea in lineas:\r\n\t\tdatos.append(linea.strip('\\n'))<\/pre>\n<p>usamos:<\/p>\n<pre class=\"lang:python decode:true \">lineas = [linea.strip('\\n') for linea in fname.readlines()]<\/pre>\n<p>El resultado ser\u00e1 el mismo. Una vez teniendo todo en una lista, podemos recorrer la lista comparando la longitud de cada una con respecto a las dem\u00e1s. Comenzamos tomando la longitud de la primera l\u00ednea (<em>lmaslarga = lineas[0]<\/em>). Y recorremos todas las l\u00edneas comparando si alguna es m\u00e1s larga. Si \u00e9se es el caso, esa ser\u00e1 nuestra nueva l\u00ednea m\u00e1s larga.<\/p>\n<h2>Ejemplo: Devolver las \u00faltimas n l\u00edneas de un archivo.<\/h2>\n<p>Queremos hacer algo similar al comando tail que devuelve las \u00faltimas n l\u00edneas de un archivo de texto.<\/p>\n<p>C\u00f3digo en Python:<\/p>\n<pre class=\"lang:python decode:true \">def leer_ultimas_lineas(nombre, n):\r\n\twith open(nombre) as fname:\r\n\t\tlineas = [lineas.strip('\\n') for lineas in fname.readlines()]\r\n\treturn lineas[-n:]\r\n\r\n\r\nprint (\"-----\")\r\nprint (\"Ultimas 2 lineas del archivo: \")\r\nprint (leer_ultimas_lineas(\"datos.txt\",2))<\/pre>\n<p>Explicaci\u00f3n. Leemos el archivo de texto y extraemos fila por fila copiando cada fila completa en una lista. (Mismo procedimiento usado en el ejemplo anterior). Devolvemos la lista lineas haciendo <em>slicing<\/em>, donde indicamos que solo queremos desde la fila <em>-n<\/em>\u00a0(contando desde el \u00faltimo elemento hacia atr\u00e1s), hasta el final de la lista. (El slicing en Python se explica en \u00e9sta entrada:\u00a0<a href=\"https:\/\/naps.com.mx\/blog\/impresion-de-cadenas-en-python\/\">Impresi\u00f3n de cadenas en Python<\/a>)<\/p>\n<h2>Video<\/h2>\n<p>\u00c9ste art\u00edculo tambi\u00e9n est\u00e1 explicado en video. Te lo dejo a continuaci\u00f3n:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/5bA0rO8yd8E\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veremos c\u00f3mo leer archivos en Python para analizarlo por l\u00ednea o por palabra. Mostramos un ejemplo de c\u00f3mo encontrar la l\u00ednea m\u00e1s larga de un archivo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[301],"tags":[304,287,291],"class_list":["post-2189","post","type-post","status-publish","format-standard","hentry","category-curso-python-analisis-datos","tag-archivos-en-python","tag-curso-python","tag-slicing-en-python"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2189"}],"version-history":[{"count":8,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2189\/revisions"}],"predecessor-version":[{"id":2199,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2189\/revisions\/2199"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}