python de enseñanza de volteo de archivos

Tabla de contenido

Nivel 1 Leer todo el contenido del archivo en una cadena

Nivel 2 Leer los primeros n caracteres del archivo

Nivel 3 Lectura y salida del contenido del archivo línea por línea

Nivel 4: leer un archivo en una lista

Nivel 5 Leer los datos del archivo en una lista bidimensional

Nivel 6 Escribe poemas Tang en el archivo.


El nivel 1  lee todo el contenido del archivo en una cadena

detalles de la misión

La tarea de este nivel: escribir un pequeño programa que pueda leer todo el contenido del archivo en una cadena.

información relacionada

Para completar la tarea de este nivel, debe dominar: 1. Abrir el archivo 2. Leer el archivo en una cadena

file = '/data/bigfiles/出塞.txt'
with open(file, mode='r', encoding='utf-8') as f:  # 为文件对象命的名放在as后面
    txt = f.read()  # 将文件全部内容读入到字符串txt中
print(txt)

El segundo nivel  lee los primeros n caracteres del archivo

detalles de la misión

La tarea de este nivel: escribir un pequeño programa que pueda leer los primeros n caracteres de un archivo.

información relacionada

Para completar la tarea de este nivel, debe dominar: 1. Leer archivo en cadena

leer archivo a cadena

2.read(size) Cuando el tamaño del parámetro es un número entero mayor o igual a 0, lee los caracteres de tamaño

n = int(input())
file = '/data/bigfiles/出塞.txt'
with open(file, mode='r', encoding='utf-8') as f:  # 为文件对象命的名放在as后面
    txt = f.read(n)  # 将文件前3个字符读入到字符串txt中
print(txt)

El nivel 3  lee y genera el contenido del archivo línea por línea

La tarea de este nivel: escribir un pequeño programa que pueda leer y generar el contenido de un archivo línea por línea.

información relacionada

Para completar la tarea de este nivel, debe dominar: 1. Leer archivo en cadena 2. Puntero de archivo

leer archivo a cadena

1.f.readline() lee una sola línea de datos de un archivo; se reserva un carácter de nueva línea (\n) al final de la cadena, y una línea en blanco se representa con '\n', y la cadena contiene solo un carácter de nueva línea. Cuando f.readline() devuelve una cadena vacía, significa que se ha llegado al final del archivo.

n = input()
file = '/data/bigfiles/'+n
with open(file,'r',encoding = 'utf-8') as poem:  # 打开文件创建文件对象,命名为poem
    while txt := poem.readline():  # 逐行读文件,直至文件结束
        print(txt.strip())         # 去除行末的换行符后输出当前读到的字符串

Nivel 4: leer un archivo en una lista

detalles de la misión

La tarea de este nivel: escribir un pequeño programa que pueda leer archivos en una lista.

información relacionada

Para completar la tarea de este nivel, debe dominar: 1. Leer el archivo en la lista

leer archivo para listar

1. readlines()Cuando no haya ningún parámetro, lea todos los datos del archivo y devuelva una lista. Cada elemento de la lista es una línea de datos en el objeto del archivo, incluido el carácter de nueva línea '\n' al final de la línea.

file = input()
with open(file, 'r', encoding='utf-8') as poem:  # 打开文件创建文件对象,命名为poem
    poem_ls = poem.readlines()  # 读取文件,到第10个字符所在的行末
print(poem_ls)

El nivel 5  lee los datos del archivo en una lista bidimensional

detalles de la misión

La tarea de este nivel: escribir un pequeño programa que pueda leer los datos del archivo en una lista bidimensional.

información relacionada

Para completar la tarea de este nivel, debe dominar: 1. Segmentación de cadenas 2. Travesía de archivos a listas bidimensionales

segmentación de cadenas

1. txt.split(sep)Segmente la cadena txt según el separador sep y devuelva una lista.

file = input()
with open('/data/bigfiles/'+file, 'r', encoding='utf-8') as fr:  # 打开文件创建文件对象,命名为poem
    score_ls = [row.strip().split(',') for row in fr]                    # 遍历文件对象,row为当前行
print(score_ls)  # 输出二维列表

El nivel 6  escribe poemas Tang en el archivo.

De acuerdo con el aviso, complemente el código en el editor de la derecha, ingrese el número de serie de un poema representado por un carácter de 3 dígitos, lea el verso con el número de serie especificado del archivo "/data/bigfiles/Three Hundred Tang Poems.txt", y luego escriba el poema. Escriba por separado en el archivo el nombre del archivo de comportamiento que comienza con el número de secuencia del poema.

instrucción de prueba

La plataforma probará el código que escribas:

Entrada de prueba:237

Salida esperada: Archivo creado:237刘长卿:送灵澈.txt

def get_poem(file):
    """读唐诗300首,定位到用户输入的序号的诗,将该首诗读取为一个字符串,返回去除末尾空白字符的字符串"""
    poem = ''                              # 空字符串,用于容纳目标诗
    poet_flag = False                      # 做一个标记,假定当前行不是目标诗
    with open(file, 'r', encoding='utf-8') as fr:  # 创建文件对象
            for line in fr:                    # 遍历文件对象
                # 当当前行包含序号(序号用3位数,不足3位前面补0)时,将当前行拼接到poem上,改变poet_flag的值为True
                if  line[:3] == str(num):
                    poem = poem + line
                    poet_flag = True
                elif line[0] in '0123456789':  # 若当前行不包含序号但有数字
                    poet_flag = False          # 改变标记,后续几行不是目标诗句
                elif poet_flag:                # 如果标记值为真(True)
                    poem = poem + line         # 将当前行拼接到字符串上
            return poem                        # 遍历结束后返回包含目标诗的字符串


def write_poem(line):
    """参数是包含指定序号诗句的字符串,提取诗的标题行做为要写入的文件名,将全部诗句按顺序写入到文件中,返回诗的标题行"""

    title = line.split(maxsplit=1)[0]  # 这里的maxsplit参数是最大拆分数,我们只需要拆分一次
    with open(title+'.txt', 'w', encoding='utf-8') as f:
        f.write(line)
        return title


def check_file(file):
    """参数是新创建的文件名,读取新创建并写入诗句的文件,检查是否写入成功,无返回值"""
    with open(file, 'r', encoding='utf-8') as fr:
        print(fr.read())            # 文件读取为一个字符串并输出


if __name__ == '__main__':
    filename = '/data/bigfiles/唐诗三百首.txt'  # 源文件路径
    num = input()  # 输入序号
    poem_str = get_poem(filename)     # 读取指定序号的诗为字符串
    file_title = write_poem(poem_str)  # 字符串写入文件,并返回标题
    check_file(file_title+'.txt')     # 查看写入的文件,输出诗的内容

 

Supongo que te gusta

Origin blog.csdn.net/m0_70456205/article/details/130675265
Recomendado
Clasificación