コード例 #1
0
def test_iterar_textos(tmp_path):
    texto = "Hello"
    archivo = tmp_path.joinpath("filas.txt")
    guardar_texto(texto, archivo)

    iterable = iterar_registros(tmp_path)
    assert len(list(iterable)) == 1
コード例 #2
0
def extraer_todos(dirin,
                  dirout,
                  recursivo=False,
                  exts=None,
                  basura=None,
                  chars=0):
    """Extrae y guarda texto y metadata de archivos.

    Parameters
    ----------
    dirin : str | Path
        Directorio donde están los documentos originales.
    dirout : str | Path
        Directorio donde se quiere guardar texto extraído.
    recursivo: bool
        Iterar recursivamente.
    exts: Iterable
        Solo considerar archivos con estas extensiones.
    basura : Iterable
        Caracteres a eliminar.
    chars : int
        Mínimo número de caracteres en una línea de texto.

    Returns
    -------
    int
        Número de documentos procesados.
    """
    dirdocs = Path(dirin).resolve()
    dirtextos = Path(dirout).resolve()
    dirmeta = crear_carpeta(dirtextos.joinpath("metadata"))

    nparts = len(dirdocs.parts)

    n = 0
    for ruta in iterar_rutas(dirdocs, recursivo=recursivo, exts=exts):
        partes = ruta.parent.parts[nparts:]
        dirtexto = dirtextos.joinpath(*partes)
        if not dirtexto.exists():
            dirtexto = crear_carpeta(dirtexto)

        archivo = dirtexto.joinpath(f"{ruta.stem}.txt")
        if not archivo.exists():
            content, metadata = extraer_info(ruta)
            texto = procesar_xhtml(content, chars=chars, basura=basura)
            if texto:
                guardar_texto(texto, archivo)

                metaout = dirmeta.joinpath(*partes)
                if not metaout.exists():
                    metaout = crear_carpeta(metaout)

                metafile = metaout.joinpath(f"{ruta.stem}.json")
                with open(metafile, "w", encoding="utf-8") as out:
                    json.dump(metadata, out, ensure_ascii=False)
                n += 1

    return n
コード例 #3
0
def test_iterar_registros_aleatorios(tmp_path):
    for i in range(10):
        texto = f"Hello{i}"
        archivo = tmp_path.joinpath(f"filas{i}.txt")
        guardar_texto(texto, archivo)

    aleatorios = iterar_registros(tmp_path, aleatorio=True)

    assert list(aleatorios) != list(iterar_registros(tmp_path))
コード例 #4
0
def test_guardar_texto(tmp_path):
    texto = "Hello"
    archivo = tmp_path.joinpath("filas.txt")

    guardar_texto(texto, archivo)
    assert archivo.read_text(encoding="utf-8") == "Hello\n"
コード例 #5
0
def test_guardar_texto_arg1(tmp_path):
    with pytest.raises(TypeError):
        archivo = tmp_path.joinpath("filas.txt")
        guardar_texto(archivo)