[Conocimientos básicos de Python] 16. Conceptos básicos y operaciones de lectura y escritura de archivos

Prefacio

La lectura y escritura de archivos es la función principal del código Python para llamar archivos de computadora. Se puede usar para leer y escribir registros de texto, clips de audio, documentos de Excel, correos electrónicos guardados y cualquier cosa guardada en la computadora.

Quizás te preguntes: ¿Por qué debería abrir un archivo en Python? ¿No sería mejor si simplemente abro ese archivo y opero con ese archivo?

En términos generales, no es ningún problema abrir la operación directamente. Pero si tiene un trabajo que requiere fusionar la información de 100 documentos de Word en un solo archivo, sería problemático copiarlos y pegarlos uno por uno, entonces puede usar Python. O, cuando desee descargar miles de datos de Internet, también es muy conveniente usar Python directamente para ayudarlo a guardar los datos en un archivo a la vez.

De lo contrario, Python nos libera del trabajo repetitivo~

[Lectura y escritura de archivos] se divide en dos partes: [lectura] y [escritura] Primero, echemos un vistazo a cómo se implementa [lectura de archivos].

leer archivo

Insertar descripción de la imagen aquí

De hecho, en realidad son sólo tres pasos:

Insertar descripción de la imagen aquí
¿Es como aquel chiste de mal gusto de hace mucho tiempo? "¿Cuántos pasos se necesitan para meter un elefante en el frigorífico?" Tres pasos: abrir el frigorífico, meter el elefante y cerrar el frigorífico. De manera similar, leer un archivo también es un proceso de tres pasos: abrir - leer - cerrar.

Déjame darte un ejemplo. Puedes seguirme en tu propia computadora. Si el entorno Python aún no está instalado en tu computadora, puedes instalarlo primero.

Primero, creemos una nueva carpeta de prueba en el escritorio y luego creemos un archivo txt llamado abc en la carpeta y escribamos cualquier cosa en él. Escribí a Zhou Zhiruo y Zhao Min.

Abro este archivo con el editor Visual Studio Code, así:

Insertar descripción de la imagen aquí
Luego, puede usar VS Code para crear un nuevo archivo Python de open.py y colocarlo en la carpeta de prueba, donde escribiremos el código.

¿Cómo escribir el código?

【Paso 1-Abrir】

Abra el archivo usando la función open(). La sintaxis es esta:

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 

La variable file1 almacena los datos del archivo leído para realizar la siguiente operación en el archivo.

Hay tres parámetros en la función open(), a la derecha:

'/Users/Ted/Desktop/test/abc.txt'
'r'
encoding='utf-8'

Veámoslos uno por uno. El primer parámetro es la dirección de almacenamiento del archivo, que debe escribirse claramente; de ​​lo contrario, la computadora no podrá encontrarlo. Nota: La dirección de mi expediente y la suya son diferentes.

Para encontrar la dirección de su archivo, simplemente arrastre el archivo que desea abrir directamente a la ventana del terminal del editor, se mostrará la dirección del archivo y luego cópielo.

Sin embargo, existen dos tipos de direcciones de archivo: rutas relativas y rutas absolutas, la dirección obtenida al arrastrarlo al terminal es una ruta absoluta. Estas dos direcciones, computadoras Mac y Windows, son un poco diferentes, déjame ayudarte a resolverlo.

La ruta absoluta es la ruta más completa y la ruta relativa se refiere a la ruta [relativa a la carpeta actual], que es la ruta de la carpeta donde se coloca el archivo py que escribió.

Si el archivo que desea abrir está en la misma carpeta que open.py, entonces simplemente use una ruta relativa. Si desea usar archivos en otras carpetas, debe usar una ruta absoluta.

Primero veamos la computadora Mac. Ahora mis archivos txt y py se colocan en la carpeta de prueba del escritorio.

Insertar descripción de la imagen aquí
Arrastré el archivo txt a la ventana de la terminal y obtuve la ruta absoluta al archivo:

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Luego, cuando lo abro con la función open(), puedo escribirlo como:

open('/Users/Ted/Desktop/test/abc.txt')   #绝对路径
open('abc.txt')    #相对路径
#相对路径也可以写成open('./abc.txt')

En este caso, puede escribir rutas tanto absolutas como relativas.

Si el archivo txt actual se coloca en una carpeta llamada Word debajo de la carpeta de prueba, la ruta absoluta y la ruta relativa serán:

open('/Users/Ted/Desktop/test/word/abc.txt'')
open('word/abc.txt')

Miremos nuevamente a Windows. En los sistemas Windows, \ se usa a menudo para representar rutas absolutas y / se usa para representar rutas relativas, por lo que cuando arrastra un archivo a la terminal, la ruta absoluta se convierte en:

C:\Users\Ted\Desktop\test\abc.txt

Sin embargo, no olvide que \ es un carácter de escape en Python, por lo que a menudo ocurren conflictos. Para evitar problemas, la ruta absoluta de Windows generalmente debe procesarse ligeramente y escribirse en los dos formatos siguientes;

open('C:\\Users\\Ted\\Desktop\\test\\abc.txt')
#将'\'替换成'\\'

open(r'C:\Users\Ted\Desktop\test\abc.txt')
#在路径前加上字母r

Hay otro consejo para obtener la ruta relativa de un archivo: abra la carpeta con VS Code, haga clic derecho en el archivo y seleccione:

Insertar descripción de la imagen aquí
Ahora, copie esta línea de código en su archivo open.py y reemplace la dirección del archivo con la suya.

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 

está bien. Finalmente terminamos de hablar sobre la dirección del primer archivo de parámetros, volvamos a ver los otros parámetros de open():

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')

El segundo parámetro indica el modo al abrir el archivo. Aquí está la cadena 'r', que significa leído, lo que indica que abrimos el archivo en modo lectura.

Quizás te preguntes, ¿por qué tienes que decidir si leer o escribir cuando lo abres, pero no decidirlo después? Esto se debe a que la computadora presta gran atención a la confidencialidad de los datos y debe decidir en qué modo abrir el archivo al abrirlo.

Además de 'r', existen otros modos como 'w' (escribir), 'a' (añadir), etc., que cubriremos más adelante.

El tercer parámetro codificación='utf-8' indica la codificación de los datos devueltos, generalmente utf-8 o gbk. Tenga en cuenta que aquí se escribe codificación en lugar de codificar.

Los tres pasos para leer un archivo: Abrir - Leer - Cerrar, [Paso 1 - Abrir], hemos terminado de hablar de ello, ahora mira [Paso 2 - Leer].

【Paso 2-Leer】

Después de abrir el archivo file1, puede usar la función read() para realizar operaciones de lectura. Por favor vea el código:

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'r',encoding='utf-8') 
filecontent = file1.read()   

La primera línea de código es lo que escribimos antes. Se abrió el archivo "abc.txt" para su lectura.

La segunda línea de código es leer el contenido del archivo 1. El método de escritura es agregar un punto después de la variable archivo1, agregar una lectura () y colocar el contenido leído en la variable contenido del archivo, para que podamos obtener el contenido de el archivo.

Entonces, ahora queremos ver qué datos se han leído, podemos usar la función print() para verlo. Complete el código restante en su propia computadora. Consulte el siguiente código.

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 
filecontent = file1.read()   
print(filecontent)

Luego, [haga clic derecho] en la ventana del editor y seleccione [Ejecutar archivo Python en la terminal]. En este momento, la terminal muestra:

Insertar descripción de la imagen aquí
Descubrirá que cuando se imprima el contenido del archivo abc.txt, se leerá como datos de cadena.

[Paso 3-Cerrar]

Para cerrar el archivo, utilice la función close().

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 
filecontent = file1.read()            
print(filecontent)
file1.close()      

Ha aprendido las primeras tres líneas de código: Línea 4: agregue un punto después de la variable archivo1 y luego agregue cerrar (), lo que significa cerrar el archivo. Asegúrese de recordar que los siguientes paréntesis no se pueden perder.

¿Por qué deberíamos cerrar el archivo? Hay dos razones: 1. Hay un límite en la cantidad de archivos que una computadora puede abrir. Si hay demasiadas llamadas open() sin close(), el archivo ya no estará abierto. 2. Puede garantizar que el contenido escrito se haya guardado en el archivo.

Una vez cerrado el archivo, ya no se puede leer ni escribir. Si aún necesita leer y escribir este archivo, debe abrir() el archivo nuevamente.

Resumamos los tres pasos de la lectura de un archivo: abrir - leer - cerrar y proporcionemos una imagen resumida.

Insertar descripción de la imagen aquí
Lo que necesita especial atención son los pasos segundo y tercero, es decir, el método de escritura de lectura y cierre.

Después de aprender [Leer archivos], luego [Escribir archivos].

escribir archivo

Insertar descripción de la imagen aquí
Jeje, escribir un archivo también es un proceso de tres pasos: abrir el archivo, escribir el archivo, cerrar el archivo.

Insertar descripción de la imagen aquí

【Paso 1-Abrir】

Abra el archivo en modo escritura.

file1 = open('/Users/Ted/Desktop/test/abc.txt','w',encoding='utf-8') 

Línea 1 de código: El archivo "abc.txt" se abre en modo escritura.

Todavía hay tres parámetros en open (), y todo lo demás es igual, excepto que el segundo parámetro debe cambiarse a 'w', que significa escribir, es decir, abrir el archivo en modo de escritura.

[Paso 2: escribir]

Para escribir contenido en un archivo, utilice la función write().

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'w',encoding='utf-8') 
file1.write('张无忌\n')     
file1.write('宋青书\n')  

Líneas 2-3 de código: las dos cadenas "Zhang Wuji" y "Song Qingshu" están escritas en el archivo "abc.txt". \n significa iniciar una nueva línea.

Siga las mismas instrucciones y recuerde ejecutar el programa. Luego, cuando abres el archivo txt para ver los datos:

Insertar descripción de la imagen aquí
¿Eh? ¿A dónde fueron Zhou Zhiruo y Zhao Min en el documento original?

Aquí está la cuestión: el modo de escritura 'w' borrará violentamente el archivo y luego lo escribirá nuevamente. Si sólo desea agregar algo sin sobrescribir completamente el archivo original, necesita usar el modo 'a', que significa agregar. Ya ha aprendido que significa agregar.

Si tuviéramos que hacerlo todo de nuevo, escribiríamos así:

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8') 
#以追加的方式打开文件abc.txt
file1.write('张无忌\n')     
#把字符串'张无忌'写入文件file1
file1.write('宋青书\n')     
#把字符串'宋青书'写入文件file1

En este caso, la adición se realizará correctamente y no se sobrescribirá. Puedes intentar agregar cualquier cosa, ejecutarlo y ver.

Insertar descripción de la imagen aquí

[Paso 3-Cerrar]

Aún así recuerde cerrar el archivo, use la función close(), mire el código:

file1 = open('/Users/Ted/Desktop/test/abc.txt','a',encoding='utf-8') 
file1.write('张无忌\n')     
file1.write('宋青书\n')     
file1.close()   

La cuarta línea de código sigue siendo una receta familiar y un sabor familiar. Esto completa [escribir archivos].

Sin embargo, hay dos pequeños consejos: 1. La función write() también escribe archivos de texto de tipo cadena. 2. En los modos 'w' y 'a', si el archivo que abre no existe, la función open() creará uno automáticamente.

[Es hora de practicar]

1. Por favor escriba la cadena 'Sutra difícil de recitar' en un archivo llamado 1.txt 2. Luego lea el contenido de este archivo 1.txt e imprímalo.

Consejo: escribe primero y luego lee. Escribir un archivo se divide en tres pasos y leer un archivo también se divide en tres pasos.

Código de referencia:

f1 = open('./1.txt','a',encoding='utf-8') 
#以追加的方式打开一个文件,尽管并不存在这个文件,但这行代码已经创建了一个txt文件了
f1.write('难念的经')
#写入'难念的经'的字符串
f1.close()           
#关闭文件 

f2 = open('./1.txt','r',encoding='utf-8')
#以读的方式打开这个文件
content = f2.read()
#把读取到的内容放在变量content里面
print(content)
#打印变量content
f2.close()
#关闭文件

Nota: La ruta se puede reemplazar según su ruta real.

resultado de la operación:

难念的经

Resumamos el método de tres pasos para escribir archivos.

Insertar descripción de la imagen aquí
Ahora surge la pregunta, ¿qué debemos hacer si los datos que queremos escribir no son contenido de texto, sino audio e imágenes?

Insertar descripción de la imagen aquí
Podemos ver que tiene el modo 'wb', lo que significa abrir un archivo en modo binario para escribir. Debido a que las imágenes y el audio se guardan en formato binario, es bueno usar el modo wb, que usaremos en la tarea de hoy.

Consejos

Aquí hay otro uso, para evitar olvidarnos de cerrar el archivo después de abrirlo, ocupar recursos o cuando no se determina el momento apropiado para cerrar el archivo, podemos usar la palabra clave with, el ejemplo anterior se puede escribir así:

# 普通写法
file1 = open('abc.txt','a') 
file1.write('张无忌') 
file1.close()

# 使用with关键字的写法
with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
    #格式:冒号不能丢
    file1.write('张无忌') 
    #格式:对文件的操作要缩进
    #格式:无需用close()关闭

Entonces, cuando veas el formato de sintaxis al abrir un archivo con open...as, debes estar tranquilo, esto es bastante común.

Como dice el refrán: "¿De qué sirve aprender Python si no puedes simplemente escribir?" ¡A continuación, escribamos código juntos (p≧w≦q)!

pequeño ejercicio

Hemos estado aquí todo el tiempo y debiste haber notado que me gusta mucho "Harry Potter" jaja.

Ahora imagina que has venido al mundo mágico. El último semestre llegará pronto y el Colegio Hogwarts de Magia y Hechicería se está preparando para contar los resultados de todos.

¿Cuál es la base para la selección? Estas son las puntuaciones habituales de las tareas de los estudiantes.

Ahora hay un archivo llamado scores.txt, que contiene las partituras de varias tareas mágicas para Hermione, Harry, Ron y Malfoy.

Insertar descripción de la imagen aquí

Sin embargo, debido a que algunas tareas mágicas tienen cierto grado de dificultad, el profesor no obliga a los estudiantes a entregarlas, por lo que la cantidad de veces que todos entregan sus tareas no es constante.

Insertar descripción de la imagen aquí
Aquí está el contenido del archivo. Puede crear un nuevo archivo Scores.txt en su computadora para operar.

罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90

Espero que cuentes los puntajes totales de la tarea mágica de estos cuatro estudiantes y luego los escribas en un archivo de texto. Tenga en cuenta que todo este ejercicio sólo se puede realizar en Python.

Frente a esta función, piénselo durante 30 segundos y piense aproximadamente en cómo implementarla. Luego haga clic en Intro para continuar.

Bien, una idea muy aproximada debería ser: obtener los datos en el archivo txt, luego hacer estadísticas sobre los datos y luego escribirlos en el archivo txt. Bien, comencemos de inmediato.

Lo primero que no hay duda es que debe ser abrir un archivo ¿Recuerdas qué función utilizas?

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 

A continuación, es hora de leer el archivo. En términos generales, usamos la función read (), pero aquí necesitamos procesar los datos de cuatro personas por separado. Queremos procesarlos fila por fila, no como un todo, por lo que al leer, también queremos leerlos fila. por fila Escoger.

Por lo tanto, necesitamos usar una nueva función readlines(), que es "leer línea por línea".

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()      
file1.close()
print(file_lines)

Utilice la función print() para imprimirlo y ver cómo se muestra el contenido leído por este método:

Insertar descripción de la imagen aquí
Como puede ver, readlines() obtendrá una lista del archivo txt, y cada cadena de la lista es cada línea en puntuaciones.txt. Y hay un símbolo \n de nueva línea después de cada cadena.

De esta manera, podemos usar un bucle for para recorrer la lista y luego procesar los datos en la lista. Consulte la quinta línea de código:

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:    #用for...in...把每一行的数据遍历
    print(i)            #打印变量i

Imprimamoslo también.

Insertar descripción de la imagen aquí
Bien, ahora necesitamos separar el nombre y la puntuación de cada línea aquí. En este momento, necesitamos usar split() para separar la cadena. Separará el contenido de la cadena por espacios.

Mirando a Ron 23 35 44 en la primera línea de la imagen de arriba, se dividirá en ['Ron', '23', '35', '44'].

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:   #用for...in...把每一行的数据遍历  
    data =i.split()    #把字符串切分成更细的一个个的字符串
    print(data)        #打印出来看看

La terminal se ve así:
Insertar descripción de la imagen aquí
Obviamente, comparando las imágenes de las dos terminales anteriores, split() divide el contenido de cada línea en cadenas, por lo que se convierte en una lista.

split() es un método para procesar cadenas que no hemos aprendido antes. Aquí, al profesor le gustaría agregar que hay muchos métodos para procesar tipos de datos, pero no podemos aprenderlos todos a la vez. En cambio, debemos aprender el más métodos básicos y necesarios, y luego continuar aprendiendo cuando se necesiten nuevos conocimientos.

split() divide una cadena y también hay una función join() que fusiona cadenas.

a=['c','a','t']
b=''
print(b.join(a))
c='-'
print(c.join(a))

resultado de la operación:

cat
c-a-t

El uso de join() es str.join(secuencia). str representa qué cadena desea usar para conectar entre estas cadenas. Aquí hay dos ejemplos, uno es una cadena vacía, el otro es una barra horizontal y la secuencia representa datos. Secuencia, en este caso lista a.

Esto es solo para que todos entiendan join(). No es necesario memorizarlo. Puede usarlo más tarde y leerlo nuevamente.

Volviendo a Harry Potter:

Insertar descripción de la imagen aquí
El dato 0 en estas cuatro listas es el nombre y los siguientes son las calificaciones. Primero debemos contar las puntuaciones totales de cada persona y luego juntar los nombres y las puntuaciones.

Todavía puedes usar un bucle for...in... para realizar operaciones de suma. Consulta el código en la línea 8:

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:
    data =i.split()    
    sum = 0                    #先把总成绩设为0
    for score in data[1:]:     #遍历列表中第1个数据和之后的数据
        sum = sum + int(score) #然后依次加起来,但分数是字符串,所以要转换    
    result = data[0]+str(sum)  #结果就是学生姓名和总分
    print(result)

Echemos un vistazo a la terminal:

Insertar descripción de la imagen aquí
Bien, el siguiente paso es escribir los resultados en una lista vacía, porque esto nos ayudará a escribir un archivo txt más adelante.

file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

final_scores = []                        #新建一个空列表
 
for i in file_lines:
    data =i.split()    
    sum = 0                    
    for score in data[1:]:     
        sum = sum + int(score)     
    result = data[0]+str(sum)+'\n'       #后面加上换行符,写入的时候更清晰。    
    final_scores.append(result)#每统计一个学生的总分,就把姓名和总分写入空列表

Bien, ya nos hemos encargado de ello, todo lo que tenemos que hacer es escribirlo en el archivo. Puedes empezar a leer desde la línea 15:

file = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file.readlines()
file.close()

final_scores = [] 

for i in file_lines:
    data =i.split()    
    sum = 0                    
    for score in data[1:]:     
        sum = sum + int(score)     
    result = data[0]+str(sum)+'\n'    
    final_scores.append(result)

winner = open('/Users/Ted/Desktop/winner.txt','w',encoding='utf-8')   # 从这行开始看
winner.writelines(final_scores)
winner.close()

La línea 15 de código abre un archivo llamado ganador.txt. (Si ganador.txt no existe en su computadora, esta línea de código creará automáticamente un ganador.txt en blanco para usted)

Las 16 líneas de código se escriben usando writelines() ¿Por qué no se puede usar write()? Debido a que final_scores es una lista, y el parámetro de write() debe ser una cadena, y writelines() puede ser una secuencia, usamos writelines().

La línea 17 de código cierra el archivo. Esto, sólo recuerda no tirar los paréntesis.

En este pequeño ejercicio, hemos agregado algunos usos de funciones nuevas. No son difíciles, pero aún te resultan un poco desconocidos. Sin embargo, en realidad están relacionados con las funciones que hemos aprendido o su uso es muy similar. sólo necesita estar familiarizado con él y apagarlo cuando necesite usarlo.

Además, en comparación con las varias montañas que ya hemos escalado, es decir, los niveles prácticos de proyectos anteriores, este pequeño ejercicio solo debe considerarse como una pequeña ladera que se puede escalar fácilmente, ¿verdad?

Bien, ese es el contenido de este nivel ~ Eso es todo por el curso. ¡No subestimes estos dos conocimientos y revísalos más! ¡Ve a hacer los ejercicios!

Supongo que te gusta

Origin blog.csdn.net/qq_41308872/article/details/132281545#comments_28450231
Recomendado
Clasificación