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下取消只读 |