Python extrae el contenido de un área determinada en un archivo

1. Descripción del problema:

Hay 2 archivos fuente de Python y 3 archivos de texto en la carpeta del candidato, correspondientes a dos preguntas respectivamente. Modifique el código de acuerdo con las instrucciones del archivo para lograr las siguientes funciones:
"Las Analectas" es una de las obras clásicas de la Escuela confuciana, que registra principalmente a Confucio Las palabras y los hechos de sus discípulos. Aquí hay una versión en línea de "The Analects", el nombre del archivo es "The Analects.txt", y su contenido está organizado en forma de una combinación de notas "original" frase por frase y frase por frase ". ". El texto original de" Las Analectas "está marcado con [Original] Para el contenido, marque el contenido de la anotación de" Las Analectas "a través de [Comentario], consulte el archivo" Las Analectas de Confucio txt "para conocer el formato de archivo del cuerpo marco
Pregunta 1 (10 puntos): Modifique el código en el archivo PY301-1.py, extraiga el contenido original en el archivo "Las Analectas de Confucio.txt" y guarde el resultado en la carpeta del candidato con el nombre de archivo "Las Analectas of Confucius-Original txt. Requisitos específicos: Mantenga todo el contenido bajo las etiquetas [originales] en el "Analects of Confucius.txt", no guarde las etiquetas y elimine los espacios al principio y al final de cada línea, y sin líneas en blanco. Los paréntesis originales y los números internos son los elementos de comentario en el archivo de origen Por favor, mantenga la marca del archivo de salida de muestra. Consulte el archivo "Analects-Original-Output Example.txt" para obtener el formato de archivo de salida de muestra. Nota: El archivo de salida de muestra ayuda a los candidatos a comprender el formato de salida y no lo usa para otros fines.
Pregunta 2 (10 puntos): en PY301-2 Modifique el código en el archivo .py para refinar aún más el "The Analects-Original txt "o" El archivo Analects-txt ", elimine todos los paréntesis y números internos en cada línea de texto y guárdelo como un archivo" Texto original purificado por tesis-.txt ". Ejemplo Para obtener el formato de archivo de salida, consulte el Archivo "The Analects of Confucius-Purified Original-Output Example.txt". Nota: El archivo de salida de muestra ayuda a los candidatos a comprender el formato de salida y no se utiliza para otros fines.

Fuente: esta pregunta es la última pregunta de aplicación completa en el segundo nivel de la computadora Python

2. Análisis de pensamiento:

① Pregunta 1: Principalmente para dominar el método de leer un archivo txt y extraer el contenido del archivo y escribirlo en otro txt. La diferencia con la operación anterior de leer el archivo es que el contenido de un área determinada del archivo necesita extraer aquí. Por lo tanto, debemos juzgar el contenido leído en el archivo. Aquí podemos usar el método readline () para leer línea por línea o directamente para atravesar el objeto obtenido por el método open () para obtener cada línea de datos , y porque necesitamos extraer ciertas áreas El contenido del texto, es decir, varias líneas de texto deben procesarse. En este momento, debe usar una variable para marcar. Cuando encuentre el [original], marque el variable a como 1, y luego leer otras líneas en el área de acuerdo con el [original] El texto del bloque de área se procesa. Cuando encuentre [comentario], debe establecer el valor de la variable de etiqueta a en 0 para indicar que el programa ha abandonado el área [original] Determine si enviar el contenido de texto al nuevo de acuerdo con el valor de la variable Archivo. El método proporcionado en la respuesta es un bucle for directo para atravesar el objeto de archivo abierto en open (), sin ningún método para leer el archivo, que no es el mismo que el método de lectura de archivo anterior, y vale la pena aprenderlo, al atravesar el objeto de archivo open (), se siente que se lee de acuerdo con cada línea

② Pregunta 2: Sobre la base de la pregunta 1, limpie más el contenido original extraído, elimine los paréntesis y los números internos, como (1) (2), etc. Una idea simple es reemplazar las cadenas mencionadas anteriormente una por una con cadenas vacías. Este reemplazo es equivalente a eliminar las cadenas mencionadas anteriormente, y puede usar la función de reemplazo para reemplazarlas.

③ También se puede aprender el método de bucle for directamente para atravesar el objeto de archivo devuelto por el método open (). Hasta cierto punto, es equivalente a leer el archivo completo y luego recorrer el contenido de cada línea en la línea del archivo por línea

3. El código es el siguiente:

Pregunta 1:

Escrito por mí mismo:

if __name__ == '__main__':
    fi = open("论语.txt", "r")
    fo = open("论语-原文.txt", "w")
    txt = fi.readline()
    flag = False
    # readline方法读取可以直接判断读取到的内容是否为空来判断是否到达了文件末尾
    while txt:
        if "【原文】" in txt:
            flag = True
            txt = fi.readline()
            continue
        if "【注释】" in txt:
            flag = False
        txt = txt.strip("\n")
        if flag and txt:
            fo.write(txt + "\n")
        txt = fi.readline()
    fi.close()
    fo.close()

Respuesta proporcionada:

if __name__ == '__main__':
    fi = open("论语.txt", "r")
    fo = open("论语-原文.txt", "w")
    flag = False
    # 直接for循环遍历open()文件对象
    for line in fi:
        if "【原文】" in line:
            flag = True
            continue
        if "【注释】" in line:
            flag = False
        line = line.strip("\n")
        if flag and line:
            fo.write(line + "\n")
    fi.close()
    fo.close()

Pregunta 2:

if __name__ == '__main__':
    fi = open("论语-原文.txt", "r")
    fo = open("论语-提纯原文.txt", "w")
    # 直接遍历open文件对象也属于逐行读取
    for line in fi:
        # 遍历每一行得到的是str字符串类型
        for i in range(23):
            line = line.replace("(" + str(i) + ")", "")
        fo.write(line)
    fi.close()
    fo.close()

 

Supongo que te gusta

Origin blog.csdn.net/qq_39445165/article/details/115218309
Recomendado
Clasificación