Python abre el archivo, la diferencia entre abierto, con abierto, os.open, os.fdopen

Python tiene funciones empaquetadas para abrir y manipular archivos. En este artículo, hablaremos sobre el uso y las diferencias de estos métodos.

abierto

La función open() se usa para abrir un archivo. Para crear un objeto de archivo,
open debe cerrarse manualmente. Si no se cierra, ocurrirá una excepción. Generalmente se usa junto con try-catch, para que pueda cerrarse normalmente incluso si se produce una excepción. Ejemplo de uso
:

file = open(’test.txt’, ‘w’)
file.write(‘Hello, world!’)
file.close()
Forma significado
r Solo lectura se puede omitir, si el archivo no existe, se informará un error
w Solo escribir, si el archivo no existe, eliminar el contenido original y volver a escribir al crear y abrir el archivo, es decir, sobrescribir
a Agregar sin permiso de lectura no sobrescribe el archivo original y lo agrega directamente al final del archivo
+ legible y escribible
r+ Legible y escribible, la escritura directa es escribir desde el principio del archivo. Después de leer (), el puntero del archivo salta al final del archivo y escribe desde el final. Si el archivo no existe, se informará un error
w+ Se puede leer y escribir, si el archivo no existe, créelo, primero elimine el contenido del archivo original y luego escriba
un+ Agregar lectura y escritura

con abierto

with open llamará automáticamente al método close, por lo que no es necesario cerrarlo manualmente.
Ejemplo de uso:

with open("test.txt","r") as file:
  for line in file.readlines():
    print(line.strip())# 把末尾的’\n’删掉

La "r" en el código anterior representa el método de apertura, y los siguientes son todos los métodos de apertura y sus significados:

método abierto significado
r Abra el archivo de solo lectura. El puntero del archivo se colocará al principio del archivo. Este es el modo predeterminado .
rb Abre un archivo en formato binario solo para lectura. El puntero del archivo se colocará al principio del archivo. Este es el modo por defecto.
r+ Abre un archivo para leer y escribir. El puntero del archivo se colocará al principio del archivo.
rb+ Abre un archivo en formato binario para lectura y escritura. El puntero del archivo se colocará al principio del archivo.
w Abre un archivo solo para escritura. Sobrescriba el archivo si ya existe. Si el archivo no existe, cree un nuevo archivo.
wb Abra un archivo en formato binario solo para escritura. Sobrescriba el archivo si ya existe. Si el archivo no existe, cree un nuevo archivo.
w+ Abre un archivo para leer y escribir. Sobrescriba el archivo si ya existe. Si el archivo no existe, cree un nuevo archivo.
wb+ Abre un archivo en formato binario para lectura y escritura. Sobrescriba el archivo si ya existe. Si el archivo no existe, cree un nuevo archivo.
a Abra un archivo para agregar. Si el archivo ya existe, el puntero del archivo se colocará al final del archivo. Es decir, el nuevo contenido se escribirá después del contenido existente. Si el archivo no existe, se crea un nuevo archivo para escritura.
abdominales Abra un archivo en formato binario para agregarlo. Si el archivo ya existe, el puntero del archivo se colocará al final del archivo. Es decir, el nuevo contenido se escribirá después del contenido existente. Si el archivo no existe, se crea un nuevo archivo para escritura.
un+ Abre un archivo para leer y escribir. Si el archivo ya existe, el puntero del archivo se colocará al final del archivo. El archivo se abrirá en modo de adición. Si el archivo no existe, cree un nuevo archivo para lectura y escritura.
ab+ Abra un archivo en formato binario para agregarlo. Si el archivo ya existe, el puntero del archivo se colocará al final del archivo. Si el archivo no existe, cree un nuevo archivo para lectura y escritura.

os.open、os.fdopen

os.open() crea un descriptor de archivo a nivel del sistema operativo y
os.fdopen() crea un objeto de archivo a partir de un descriptor de archivo.
Un objeto de archivo es una clase de Python que contiene un descriptor de archivo, lo que hace que los archivos sean más convenientes y menos propensos a errores. Proporcionan, por ejemplo, manejo de errores, almacenamiento en búfer, lectura línea por línea, conversión de juego de caracteres y apagado cuando se recolecta basura.

Los descriptores de archivos son funciones de bajo nivel para trabajar con archivos proporcionados directamente por el kernel del sistema operativo. Un descriptor de archivo es un pequeño entero que identifica un archivo abierto en una tabla de archivos abiertos que mantiene el núcleo para cada proceso. Muchas llamadas al sistema aceptan descriptores de archivos, pero son inconvenientes de usar, ya que a menudo requieren búferes de ancho fijo, múltiples reintentos bajo ciertas condiciones y manejo manual de errores.

El open() incorporado toma un nombre de archivo y devuelve un nuevo objeto de archivo de Python. Esto es todo lo que necesita en la mayoría de los casos.

os.open() toma un nombre de archivo y devuelve un nuevo descriptor de archivo. Este descriptor de archivo se puede pasar a otras funciones de bajo nivel como os.read() y os.write() o os.fdopen() como se describe a continuación. Solo necesita hacer esto cuando escribe código que se basa en API dependientes del sistema operativo, como usar el indicador O_EXCL para abrir (2).

os.fdopen() toma un descriptor de archivo existente, generalmente producido por una llamada del sistema Unix, como pipe() o dup(), y genera un objeto de archivo de Python a su alrededor. Efectivamente, convierte el descriptor de archivo en un objeto de archivo completo, lo cual es útil cuando interactúa con código C, o simplemente con API que crean descriptores de archivo de bajo nivel.

La apertura incorporada se puede lograr usando os.open() (para crear un descriptor de archivo) y os.fdopen() (para envolverlo en un objeto de archivo):

Puede usar os.fdopen y os.open en lugar de con open, de esta manera puede especificar el permiso para abrir el archivo.Ejemplo de
uso:

STAT_FLAGS = os.O_WRONLY
STAT_MODES = stat.S_IWUSR | stat.S_IRUSR
with os.fdopen(os.open(test_file, STAT_FLAGS, STAT_MODES), 'w') as fd:

test_file: el archivo para abrir
STAT_FLAGS: la forma de abrir
STAT_MODES: el permiso para abrir

El uso de os.open es el siguiente:

os.open(file, flags[, mode]);

banderas especifica cómo abrir.
banderas: este parámetro puede ser las siguientes opciones, uso múltiple "|" separado, la lista de parámetros de banderas:

parámetro significado
os.O_RDONLY abrir como solo lectura
os.O_WRONLY abierto solo para escritura
os.O_RDWR Abierto para leer y escribir
os.O_NONBLOCK abrir sin bloquear
os.O_APPEND abrir como anexo
os.O_CREAT Crear y abrir un nuevo archivo
os.O_TRUNC Abrir un archivo y truncarlo a cero (debe tener permiso de escritura)
os.O_EXCL Devuelve un error si el archivo especificado existe
os.O_SHLOCK Adquirir bloqueos compartidos automáticamente
os.O_EXLOCK Adquirir bloqueos independientes automáticamente
os.O_DIRECT Eliminar o reducir los efectos de almacenamiento en caché
os.O_FSYNC escribir sincrónicamente
os.O_NOFOLLOW No sigas enlaces blandos

mode especifica los permisos para abrir el archivo.
modo: este parámetro puede tener las siguientes opciones, uso múltiple "|" separado, lista de parámetros de modo:

parámetro significado
stat.S_IXOTH Otros usuarios tienen derechos de ejecución 0o001
stat.S_IWOTH Otros usuarios tienen permiso de escritura 0o002
stat.S_IROTH Otros usuarios tienen permiso de lectura 0o004
stat.S_IRWXO 其他用户有全部权限(权限掩码)0o007
stat.S_IXGRP 组用户有执行权限0o010
stat.S_IWGRP 组用户有写权限0o020
stat.S_IRGRP 组用户有读权限0o040
stat.S_IRWXG 组用户有全部权限(权限掩码)0o070
stat.S_IXUSR 拥有者具有执行权限0o100
stat.S_IWUSR 拥有者具有写权限0o200
stat.S_IRUSR 拥有者具有读权限0o400
stat.S_IRWXU 拥有者有全部权限(权限掩码)0o700
stat.S_ISVTX 目录里文件目录只有拥有者才可删除更改0o1000
stat.S_ISGID 执行此文件其进程有效组为文件所在组0o2000
stat.S_ISUID 执行此文件其进程有效用户为文件所有者0o4000
stat.S_IREAD windows下设为只读
stat.S_IWRITE windows下取消只读

Supongo que te gusta

Origin blog.csdn.net/weixin_42648692/article/details/125976027
Recomendado
Clasificación