aprendizaje de Python [lectura y escritura de archivos]

Prefacio

En el artículo anterior, aprendizaje de Python - [viñeta 14] , aprendí sobre los paquetes y módulos integrados en Python y continuaré aprendiendo en este artículo.Lectura y escritura de archivos en Python.

Codificación

Antes de aprender a leer y escribir archivos, primero comprendamos el método de codificación en Python:
Insertar descripción de la imagen aquí

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。
字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。
一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。


ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

El intérprete de Python usa Unicode (memoria) y el archivo de Python (.py) usa UTF-8 (memoria externa) en el disco.

La codificación predeterminada utilizada en python3 es UTF-8;

Podemos usar getdefaultencoding() en el módulo sys para obtener el formato de codificación predeterminado

import sys
print(sys.getdefaultencoding())
# utf-8

En la memoria de la computadora, la codificación Unicode se usa de manera uniforme. Cuando sea necesario guardarla en el disco duro o transmitirla, se convertirá a la codificación UTF-8:

Cuando usamos el Bloc de notas para editar, los caracteres UTF-8 leídos del archivo se convierten en caracteres Unicode y se almacenan en la memoria; una vez completada y guardada la edición, Unicode se convierte a UTF-8 y se guarda en el archivo.

Insertar descripción de la imagen aquí
Veamos el tipo de codificación predeterminado al abrir un archivo Python con el Bloc de notas y luego guardarlo como:

Insertar descripción de la imagen aquí
El formato de codificación predeterminado guardado en el Bloc de notas es ANSI (para ser precisos, no existe un método de codificación específico llamado ANSI. Es solo otro nombre en el sistema operativo Windows. En el sistema operativo Windows simplificado chino, ANSI es GBK), si Usamos Python directamente para crear un nuevo archivo de documento de texto txt. Debido a la incompatibilidad del formato de codificación, se producirán caracteres confusos:

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Para evitar el problema de formatos de codificación incompatibles, podemos modificar el formato de codificación de los datos escritos en el código a UTF-8:

f = open("编码.txt", "w",encoding='UTF-8')#将输入数据的编码格式改为UTF-8
f.write("你好!世界!")
f.close()

Insertar descripción de la imagen aquí
Los socios que quieran saber más sobre el formato de codificación pueden consultar este artículo:​ ​Haga clic para ver​.

Modos comunes de apertura de archivos

Según la forma organizativa de los datos de los archivos, los archivos se dividen en las dos categorías siguientes:

 文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开

   二进制文件: 把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,如图片文件(.png  .jpeg等)以及  .doc文档等。 常见的打开模式:

  r  以只读的模式打开文件,文件的指针将会放在文件的开头

  w   以只写的模式打开文件  如果文件不存在就创建,如果文件存在就覆盖文件的原有内容,文件指针在文件的开头

  a   以追加的模式打开文件,如果文件不存在就创建,文件指针在文件开头;如果文件存在,则在文件末尾追加内容,文件指针在源文件末尾

  b 以二进制的方式打开文件  不能单独使用,需要与共它模式一起使用 如 rb(只读的方式打开二进制文件)或者wb(只写的方式打开二进制文件)

  + 以读写的方式打开文件,不能单独使用,需要和其他模式一起使用 比如 a+

Cabe señalar que cuando leemos y escribimos archivos, la 代码最后要对文件进行close()关闭操作operación: cerrar () escribe el contenido del búfer en el archivo, cierra el archivo al mismo tiempo y libera los recursos relacionados con el objeto del archivo.
r solo lectura

Abra el archivo en modo de solo lectura

file_r=open('a.txt','r')
print(file_r.read())#读取文件内容
file_r.close() #关闭文件 只要我们打开了文件,在代码结束时就要写上关闭文件的代码,以释放资源。

Hablando de solo lectura, aquí hay varios métodos comunes de objetos de archivo. Podemos usar el modo de solo lectura para ver las funciones de cada método:

read([tamaño]) lee bytes o caracteres de tamaño del archivo y devuelve el contenido. Si se omite [tamaño], leerá desde el principio del archivo hasta el final del archivo a la vez;

readline()  从文本文件中读取第一行内容;

readlines()  把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表中返回;

seek(offest,[whence])  把文件指针移动到新的位置,offset表示相对于whence的位置;

tell()    返回文件指针的当前位置;

flush()  把缓冲区的内容写入到文件中,但是不关闭文件​

Primero leemos el contenido completo de a.py:

Insertar descripción de la imagen aquí
Luego lea un.txt usando el método habitual de lectura de objetos de archivos:

# read([size])   从文件中读取size个字节或者是字符的内容的返回,如果省略[size]的话,就会从文件的开头一次性读取到文件的末尾
file_r=open('a.txt','r')
print(file_r.read(5)) #返回5个字节
file_r.close()

print('------------------------\n')

# readline()  读取文本中的第一行内容
file_rl=open('a.txt')
print(file_rl.readline())
file_rl.close()

print('------------------------\n')

# readlines()   把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表中返回
file_rls=open('a.txt','r')
print(file_rls.readlines())
file_rls.close()

Insertar descripción de la imagen aquí

buscar()

Ingrese el número de bytes entre paréntesis de seek() y el puntero del archivo retrocederá unos cuantos bytes desde el principio del archivo.

file_seek=open('a.txt','r')
file_seek.seek(2)
print((file_seek.read()))
file_seek.close()  #llo world

a.txt:
Insertar descripción de la imagen aquí
Nota: si la cantidad de bytes que necesitamos leer debe ser la cantidad correcta de bytes; por ejemplo, al leer caracteres chinos, si ingresa 2 y un carácter chino en codificación UTF-8 tiene 3 bytes, hacer que el programa informe un error.

decir()

Devuelve la posición actual del puntero del archivo.

file=open('a.txt','r')
file.seek(2)
print(file.read())
print(file.tell()) #返回指针当前所在的位置
file.close()

Insertar descripción de la imagen aquí

enjuagar()

Escriba el contenido del búfer en el archivo, pero no cierre el archivo.

file=open('b.txt','a')#采用追加的方式打开文件
file.write('hello')
file.flush()  #把缓冲区的内容写入到文件中,但是不关闭文件
file.write('world')
file.close()

Pero distinguimos flush () de close (), flush()不会关闭该文件,也就是说可以在flush()代码执行之后可以继续往文件里写入数据;pero después de ejecutar close (), no se pueden escribir más datos en el archivo; de lo contrario, se informará un error.

Insertar descripción de la imagen aquí

escribimos solo

Abra el archivo en modo de solo escritura. Si el archivo no existe, créelo. Si el archivo existe, sobrescriba el contenido original del archivo. El puntero del archivo está al principio del archivo: abra un.txt en modo de lectura
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
. modo único Encontramos que en el archivo a.txt se sobrescribe el contenido original.

Aquí usamos el método de escritura del objeto de archivo: write(str) escribe el contenido de la cadena str en el archivo

También existe un método comúnmente utilizado para escribir objetos de archivo:

writelines(s_list) escribe la lista de cadenas s_list en un archivo de texto sin agregar nuevas líneas

s_lis1=['hello','world','hello','python']
file_wl=open('a.txt','w')
file_wl.writelines(s_lis1)
file_wl.close()

Insertar descripción de la imagen aquí
Lo que hay que tener en cuenta al utilizar este método es que lo que se escribe debe ser una lista de cadenas, si no es una lista de cadenas se informará un error de tipo:
Insertar descripción de la imagen aquí

a abre el archivo en modo agregar

Abra el archivo en modo agregar. Si el archivo no existe, se creará. El puntero del archivo estará al principio del archivo. Si el archivo existe, el contenido se agregará al final del archivo. El archivo El puntero estará al final del archivo fuente.

file_a=open('a.txt',"a")
file_a.write('python') #写入'python'
file_a.close()

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

b Abrir archivo binario

Archivo binario: el contenido de los datos se almacena en "bytes" y no se puede abrir con el Bloc de notas. Debe abrirse con un software especial, como archivos de imágenes (.png, .jpeg, etc.) y documentos .doc, etc.

b no se puede usar solo y debe usarse junto con otros modos: como rb o wb

# 打开读取源文件
src_file=open('befor.png','rb')
# 打开写入目标文件
target_file=open('after.png','wb')
# 将从源文件中读取的文件写入目标文件
target_file.write(src_file.read())
# 将目标文件和源文件关闭
target_file.close()
src_file.close()

Insertar descripción de la imagen aquí

Una frase por artículo

No fantasees cuando se ponga el sol, trabaja duro cuando salga el sol.

Si hay alguna deficiencia, ¡gracias por corregirme!

Supongo que te gusta

Origin blog.csdn.net/weixin_64122448/article/details/133106231
Recomendado
Clasificación