Tengo un archivo de texto, quiero leer este archivo de texto en 3 diferentes matrices, matriz1 y matriz2 array3. el primer párrafo se coloca en array1, el párrafo segundo se coloca en matriz2 y así sucesivamente. el párrafo 4 a continuación se le colocará en array1 element2 y así sucesivamente, los párrafos están separados por una línea en blanco. alguna idea?

7 Comentarios

  1. 9

    Este es el código básico me gustaría tratar:

    f = open('data.txt', 'r')
    
    data = f.read()
    array1 = []
    array2 = []
    array3 = []
    splat = data.split("\n\n")
    for number, paragraph in enumerate(splat, 1):
        if number % 3 == 1:
            array1 += [paragraph]
        elif number % 3 == 2:
            array2 += [paragraph]
        elif number % 3 == 0:
            array3 += [paragraph]

    Esto debería ser suficiente para empezar. Si los párrafos en el archivo se divide en dos nuevas líneas, a continuación, «\n\n» debe hacer el truco para dividirlos.

    • with open('data.txt', 'r') as f: sería preferible.
  2. 2
    import itertools as it
    
    
    def paragraphs(fileobj, separator='\n'):
        """Iterate a fileobject by paragraph"""
        ## Makes no assumptions about the encoding used in the file
        lines = []
        for line in fileobj:
            if line == separator and lines:
                yield ''.join(lines)
                lines = []
            else:
                lines.append(line)
        yield ''.join(lines)
    
    paragraph_lists = [[], [], []]
    with open('/Users/robdev/Desktop/test.txt') as f:
        paras = paragraphs(f)
        for para, group in it.izip(paras, it.cycle(paragraph_lists)):
            group.append(para)
    
    print paragraph_lists
  3. 1

    Porque me siento como proyección:

    with open('data.txt') as f:
        f = list(f)
        a, b, c = (list(__import__('itertools').islice(f, i, None, 3)) for i in range(3))
    • Impresionante, pero más que un poco difícil de leer 😛
    • Eso no dividir el contenido del archivo; la islice de objetos a recorrer las líneas en el archivo.
    • Cada uno es un iterador a través de un subconjunto de líneas en el archivo, que es explícitamente convertido en un list. ¿Cuál es el problema? Edit: probado y se ha encontrado que todo lo que termina en la primera iteración, por razones que no entiendo. Este es fijado por la lectura de una lista en lugar de una secuencia (que es lo que he probado originalmente); editado en consecuencia.
    • Sí. OP quiere recorrer los párrafos, no líneas
    • Seguimiento: el problema se produce porque cada islice intentos para leer la secuencia completamente antes de que el siguiente se pone a funcionar. Molesto; no debe ser una forma más elegante de multiplex de un arroyo. @Rob «párrafos» son normalmente definidos por saltos de línea en los archivos de texto; si las líneas de texto son explícitamente envuelto, a continuación, el OP debe, por así decirlo, y de identificar exactamente lo que separa a los párrafos.
    • Yo diría que los párrafos están generalmente separados por una línea en blanco, por lo que dos saltos de línea ‘\n\n’. No puede ser (y es probable que sea) más de una línea (y por lo tanto caracteres de salto de línea) dentro de un párrafo. Tan simple basado en la línea de iteración no es suficiente. De todos modos, el islice problemas es interesante.
    • Si tomamos \n\n como nuestro separador, luego de leer el archivo en una lista de los párrafos es tan simple como f.read().split('\n\n'). Aunque dado que la transmisión de la cosa no funciona bien, ya no hay un punto para ella; sería mejor utilizar la lista de cortes.

  4. 1

    Sé que esta pregunta fue hecha mucho antes, pero acaba de poner a mis entradas, de modo que le sea útil a alguien más en algún punto del tiempo.
    Llegué a conocer mucho más fácil manera de dividir el archivo de entrada en los párrafos basándose en el Párrafo Separador(puede ser un \n o un espacio en blanco o cualquier otra cosa) y el fragmento de código para su pregunta es la siguiente :

    with open("input.txt", "r") as input:
        input_ = input.read().split("\n\n")   #\n\n denotes there is a blank line in between paragraphs.

    Y después de ejecutar este comando, si intenta imprimir input_[0] se mostrará el primer párrafo, input_[1] mostrará el párrafo segundo, y así sucesivamente. Así que poner todos los párrafos de la presente en el archivo de entrada en una Lista con cada elemento de la Lista contiene un párrafo desde el archivo de entrada.

  5. 0

    Con sectores también funcionaría.

    par_separator = "\n\n"
    paragraphs = "1\n\n2\n\n3\n\n4\n\n5\n\n6".split(par_separator)
    a,b,c = paragraphs[0:len(paragraphs):3], paragraphs[1:len(paragraphs):3],\
            paragraphs[2:len(paragraphs):3] 

    Dentro de la rebanada: [inicio índice, índice final,paso]

  6. 0

    Forma más elegante para la derivación de rebanadas:

    def grouper(n, iterable, fillvalue=None):
        args = [iter(iterable)] * n
        return itertools.izip_longest(fillvalue=fillvalue, *args)
    
    for p in grouper(5,[sent.strip() for sent in text.split('\n') if sent !='']):
        print p

    Sólo asegúrese de acuerdo con Ninguno en el texto final

  7. 0

    Este código se busca líneas entre dos puntos:

    rr = [] #Array for saving lines    
    for f in file_list:
        with open(f, 'rt') as fl:
            lines = fl.read()
            lines = lines[lines.find('String1'):lines.find('String2')] 
            rr.append(lines)

Dejar respuesta

Please enter your comment!
Please enter your name here