Biblioteca PyPDF2. Múltiples archivos
Tarea complementaria de la anterior (acceder a múltiples páginas) es la que me propongo resolver ahora: acceder de forma automatizada a varios archivos. Se trata también de una práctica que, sin duda, realizaremos con cierta frecuencia, así que interesa aprender cómo.
Realmente es menos relevante para este objetivo que nos interese una única página que sean varias (o todo el documento), pero sí es seguro que automatizar el acceso a varios documento nos va a ser de mucha ayuda, sea para la mera captura del texto de múltiples documento o para la búsqueda selectiva de información concreta en múltiples documentos de igual estructura.
Para llevar a cabo esta tarea, además de PyPDF2 necesitamos utilizar también la biblioteca os, gracias a la cual podremos automatizar el acceso a todos los documentos ubicados en un directorio determinado. Lo que resta es tarea que corresponde a PyPFD2, como veremos a continuación.
Para esta práctica he creado un directorio auxiliar llamado coleccion1, que contiene cinco documentos pdf simples (de una única página) que son la repetición de uno con el que ya trabajamos en [esta entrada] (1). Este es el código del script
import osfrom PyPDF2 import PdfReader#Accedo a directorio pdf/coleccion1os.chdir('pdf/coleccion1')#Creo variables para acceso al contenido de los documentostexto = ''separador = "\n\nSiguiente documento--------------\n\n"#Listo los componentes del directoriolista_archivos = os.listdir('.')#... y los recorro accediendo al contenido, además de contarlos para identificar su númeroi = 0for lista in lista_archivos:lector = PdfReader(lista)pagina = lector.pages[0]texto += pagina.extract_text() + separadorprint(lista)i = i + 1#Imprimo en pantalla el número de registros...print("Número total de archivos " + str(i))# y su contenidoprint("\nINICIO DEL DOCUMENTO PDF ------------------------\n")print(texto)print("\nFIN DEL TEXTO DEL DOCUMENTO PDF ----------------")
Gracias a la biblioteca os y siguiendo el procedimiento ya explicado [en esta entrada] puedo acceder a los archivos del directorio que me interesa (2) y mediante el bucle (for lista in lista_archivos:) los recorro accediendo a su contenido gracias a (lector = PdfReader(lista)) y al procedimiento de acceso a la página (pagina = lector.pages[0]). El procedimiento finalizar, como ya sabemos, asignando acumulativamente el contenido de cada página a la variable texto (texto += pagina.extract_text() + separador), que después imprimimos por pantalla (print(texto)), aunque podríamos tratar de otro modo.
Si en lugar de trabajar con documentos pdf de una página trabajáramos con otros de múltiples páginas, pero sólo quisiéramos acceder al contenido de una de ellas, usaríamos el mismo script modificando la referencia al directorio (vg. os.chdir('pdf/coleccion2')) y el índice de la página en la instrucción (pagina = lector.pages[4]) (3).
Finalmente puede que nos interese acceder a todo el contenido de unos archivos multi-página. Para ello partiremos del script anterior, pero modificándolo de forma sustancial...
import osfrom PyPDF2 import PdfReader#Accedo a directorio pdf/coleccion2os.chdir('pdf/coleccion2')#Creo variables para acceso al contenido de los documentospag = 0texto = ''separador = "\n\nSiguiente documento--------------\n\n"#Listo los componentes del directorio...lista_archivos = os.listdir('.')#... y los muestro en pantallai = 0print("Listado de los archivos del directorio")for lista in lista_archivos:print(lista)i = i +1print("Número total de archivos " + str(i))# Vuelvo a recorrer la lista de archivos, copio su contenido...for lista in lista_archivos:lector = PdfReader(lista)pag = len(lector.pages)for pg in range(pag):pagina = lector.pages[pg]texto += pagina.extract_text()# y lo muestro en pantallaprint("\nINICIO DEL DOCUMENTO PDF ------------------------\n")print(texto)print("\nFIN DEL TEXTO DEL DOCUMENTO PDF ----------------")
... primero, para hacerlo más claro separo el recorrido del directorio y la escritura del título de los documentos y su conteo a un bucle específico...
i = 0print("Listado de los archivos del directorio")for lista in lista_archivos:print(lista)i = i +1print("Número total de archivos " + str(i))
... y segundo, recorro todas las páginas de cada uno de los archivos y las paso a la variable texto mediante un segundo bucle que recorre de nuevo los archivos y anida un segundo bucle que recorre las páginas de los documentos (4).
for lista in lista_archivos: # Primer bucle: recorre los archivos del directoriolector = PdfReader(lista)pag = len(lector.pages)for pg in range(pag): # Segundo bucle: recorre todas las páginas de cada uno de los pdf.pagina = lector.pages[pg]texto += pagina.extract_text()
NOTAS
(1) De este modo me ahorro subir los archivos, aunque tú tendrás que replicar la carpeta y su contenido. Recuerda crear dentro de coleccion1 de VueltaCavernas0.pdf a VueltaCavernas4.pdf.
(2) En este script mostrarlos en pantalla y contarlos es sólo un modo de conocer que el procedimiento funciona correctamente.
(3) Para este ejemplo he creado un segundo directorio (coleccion2) que contiene repetido el archivo multi-página usado en [esta entrada]. Para crear el script que acceda a una de sus páginas (la 5, en el ejemplo indicado en cuerpo de la entrada) sólo tienes que realizar sobre el explicado los cambios que se proponen.
(4) Para esta tercera opción puedes usar el mismo directorio que en la segunda versión del primer script (ver nota 3)

No hay comentarios:
Publicar un comentario
Comenta esta entrada