Python Task9 notas de estudio 8.8 (54-clock in time-QQ)

Task9 Archivo y sistema de archivos
Abrir archivo:
abrir (archivo, modo = 'r', almacenamiento en búfer = Ninguno, codificación = Ninguno, errores = Ninguno, nueva línea = Ninguno, closefd = Verdadero) Abrir archivo y devolver una secuencia.
archivo: requerido, ruta de archivo (ruta relativa o absoluta)
modo: opcional, modo de archivo abierto
almacenamiento en búfer: establecer
codificación de búfer : generalmente usar utf8
errores: nivel de error nueva línea: distinguir caracteres de nueva línea
Los modos comunes son:
'r': solo lectura Forma de abrir el archivo. El puntero del archivo se colocará al principio del archivo. Este es el modo por defecto.
'w': abre un archivo solo para escritura.
Si el archivo ya existe, ábralo y comience a editar desde el principio.
Es decir, se eliminará el contenido original.
Si el archivo no existe, cree uno nuevo.
'x': modo de escritura, crea un nuevo archivo, si el archivo ya existe, se informará un error.
'a': modo de anexar, abre un archivo para agregar.
Si el archivo ya existe, el puntero del archivo se colocará al final del archivo.
En otras palabras, el nuevo contenido se escribirá después del contenido existente.
Si el archivo no existe, cree un nuevo archivo para escribir.
'b': abre el archivo en modo binario. Generalmente se usa para archivos que no son de texto, como imágenes.
't': Abrir en modo texto (predeterminado). Generalmente se usa para archivos de texto, como txt.
'+': Modo de lectura y escritura (se puede agregar a otros modos)

Abra un archivo y devuelva el objeto de archivo. Si el archivo no se puede abrir, se lanzará OSError.

f = open('将进酒.txt')
print(f)
# <_io.TextIOWrapper name='将进酒.txt' mode='r' encoding='cp936'>

for each in f:
    print(each)

# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# 烹羊宰牛且为乐,会须一饮三百杯。
# 岑夫子,丹丘生,将进酒,杯莫停。
# 与君歌一曲,请君为我倾耳听。
# 钟鼓馔玉不足贵,但愿长醉不复醒。
# 古来圣贤皆寂寞,惟有饮者留其名。
# 陈王昔时宴平乐,斗酒十千恣欢谑。
# 主人何为言少钱,径须沽取对君酌。
# 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

El método de objeto de archivo
fileObject.close () se utiliza para cerrar un archivo abierto. El archivo cerrado ya no se puede leer ni escribir, de lo contrario se activará un ValueError.
fileObject.read ([tamaño]) se utiliza para leer el número especificado de caracteres del archivo, y leer todos si no se proporciona o es negativo.

f = open('将进酒.txt', 'r')
line = f.read(20)
print("读取的字符串: %s" % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。

f.close()

fileObject.readline () lee la línea completa, incluido el carácter "\ n":

f = open('将进酒.txt', 'r')
line = f.readline()
print("读取的字符串: %s" % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。
f.close()

fileObject.readlines () se usa para leer todas las líneas (hasta el final de EOF) y devolver una lista, que puede ser procesada por la estructura de Python para ... en ...

f = open('将进酒.txt', 'r')
lines = f.readlines()
print(lines)

for each in lines:
    each.strip()
    print(each)

# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# 烹羊宰牛且为乐,会须一饮三百杯。
# 岑夫子,丹丘生,将进酒,杯莫停。
# 与君歌一曲,请君为我倾耳听。
# 钟鼓馔玉不足贵,但愿长醉不复醒。
# 古来圣贤皆寂寞,惟有饮者留其名。
# 陈王昔时宴平乐,斗酒十千恣欢谑。
# 主人何为言少钱,径须沽取对君酌。
# 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

f.close()

fileObject.tell () devuelve la posición actual del archivo, es decir, la posición actual del puntero del archivo.

f = open('将进酒.txt', 'r')
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
pos = f.tell()
print(pos)  # 42
f.close()

fileObject.seek (offset [, de donde]) se usa para mover el puntero de lectura de archivos a la posición especificada. offset: El offset inicial, es decir, el número de bytes que se deben mover. Si es un número negativo, significa comenzar desde los últimos dígitos. de donde: Opcional, el valor predeterminado es 0. Defina un parámetro para el desplazamiento para indicar desde qué posición comenzar el desplazamiento; 0 significa contar desde el principio del archivo, 1 significa contar desde la posición actual y 2 significa contar desde el final del archivo.

f = open('将进酒.txt', 'r')
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
line = f.readline()
print(line)
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
f.seek(0, 0)
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
f.close()

fileObject.write (str) se usa para escribir la cadena de caracteres especificada en el archivo, y se escribe la longitud de los caracteres devueltos.

f = open('workfile.txt', 'wb+')
print(f.write(b'0123456789abcdef'))  # 16
print(f.seek(5))  # 5
print(f.read(1))  # b'5'
print(f.seek(-3, 2))  # 13
print(f.read(1))  # b'd'

Antes de que se cierre el archivo o se actualice el búfer, el contenido de la cadena se almacena en el búfer. En este momento, no puede ver el contenido escrito en el archivo. Si el modo de apertura de archivo es con b, entonces al escribir el contenido del archivo, str (parámetro) debe convertirse a formato de bytes usando el método de codificación, de lo contrario se informará un error: TypeError: se requiere un objeto de tipo bytes, no ' str '.

fileObject.writelines (secuencia) escribe una lista de cadenas de secuencia en el archivo. Si necesita ajustar las líneas, debe agregar un carácter de nueva línea \ n para cada línea. Como:

f = open('test.txt', 'w+')
seq = ['小马的程序人生\n', '老马的程序人生']
f.writelines(seq)
f.seek(0, 0)
for each in f:
    print(each)
    
# 小马的程序人生
# 老马的程序人生
f.close()

Conciso con instrucción
Algunos objetos definen el comportamiento de limpieza estándar, independientemente de si el sistema lo usa con éxito, una vez que ya no es necesario, se ejecutará este comportamiento de limpieza estándar. La palabra clave con declaración puede garantizar que un objeto como un archivo ejecutará su método de limpieza correctamente después de su uso.

try:
    f = open('myfile.txt', 'w')
    for line in f:
        print(line)
except OSError as error:
    print('出错啦!%s' % str(error))
finally:
    f.close()

# 出错啦!not readable

Después de ejecutar este código, incluso si algo sale mal durante el procesamiento, el archivo f siempre se cerrará.

try:
    with open('myfile.txt', 'w') as f:
        for line in f:
            print(line)
except OSError as error:
    print('出错啦!%s' % str(error))

# 出错啦!not readable    

2. Las funciones de archivos / directorios de
uso común en el módulo OS son sistemas operativos de uso común: Windows, Mac OS, Linu, Unix, etc. Los principios operativos subyacentes de estos sistemas operativos son diferentes para el acceso al sistema de archivos, por lo que puede Será necesario considerar qué módulos de sistema de archivos usar para diferentes sistemas ... Este enfoque es muy poco amigable y problemático, porque significa que cuando el entorno operativo de su programa cambia, debe modificar una gran cantidad de ellos en consecuencia. Con el módulo OS (Operation System), no necesitamos preocuparnos por qué módulo se usa bajo qué sistema operativo, el módulo OS lo ayudará a seleccionar el módulo correcto y llamarlo.
os.getcwd () se usa para devolver el directorio de trabajo actual.
os.chdir (ruta) se usa para cambiar el directorio de trabajo actual a la ruta especificada.

import os

path = 'C:\\'
print("当前工作目录 : %s" % os.getcwd())
# 当前工作目录 : C:\Users\Administrator\PycharmProjects\untitled1
os.chdir(path)
print("目录修改成功 : %s" % os.getcwd())
# 目录修改成功 : C:\

listdir (ruta = '.') devuelve una lista de los nombres de archivos o carpetas contenidos en la carpeta especificada por ruta.

import os

dirs = os.listdir()
for item in dirs:
    print(item)

os.mkdir (ruta) crea un directorio de un solo nivel y lanza una excepción si el directorio ya existe.

import os

if os.path.isdir(r'.\b') is False:
    os.mkdir(r'.\B')
    os.mkdir(r'.\B\A')

os.mkdir(r'.\C\A') # FileNotFoundError

os.makedirs (ruta) se utiliza para crear directorios de varios niveles de forma recursiva. Si el directorio ya existe, se lanzará una excepción.

os.remove (ruta) se utiliza para eliminar archivos en la ruta especificada. Si la ruta especificada es un directorio, se lanzará OSError.
Por ejemplo, cree el archivo. \ E \ A \ text.txt primero y luego elimínelo:

import os

print("目录为: %s" % os.listdir(r'.\E\A'))
os.remove(r'.\E\A\test.txt')
print("目录为: %s" % os.listdir(r'.\E\A'))

os.rmdir (ruta) se utiliza para eliminar un directorio de un solo nivel. Solo si esta carpeta está vacía, de lo contrario, se lanza OSError.

import os

print("目录为: %s" % os.listdir(r'.\E'))
os.rmdir(r'.\E\A')
print("目录为: %s" % os.listdir(r'.\E'))

os.removedirs (ruta) elimina un directorio de forma recursiva, tratando de eliminarlo capa por capa del subdirectorio al directorio principal, y lanza una excepción cuando el directorio no está vacío.
Por ejemplo, primero cree el directorio. \ E \ A y luego elimínelo:

import os

print("目录为: %s" % os.listdir(os.getcwd()))
os.removedirs(r'.\E\A')  # 先删除A 然后删除E
print("目录为: %s" % os.listdir(os.getcwd()))

El método os.rename (src, dst) se utiliza para nombrar archivos o directorios, de src a dst. Si dst es un directorio existente, se lanzará OSError.

Cambie el nombre del archivo test.txt a test2.txt:

import os

print("目录为: %s" % os.listdir(os.getcwd()))
os.rename("test.txt", "test2.txt")
print("重命名成功。")
print("目录为: %s" % os.listdir(os.getcwd()))

os.system (comando) ejecuta el comando de shell del sistema (convierte una cadena en un comando)
primero crea un archivo a.py por sí mismo y luego lo abre mediante el comando de shell.

import os

path = os.getcwd() + '\\a.py'
a = os.system(r'python %s' % path)

os.system('calc')  # 打开计算器

os.curdir se refiere al directorio actual (.)
os.pardir se refiere al directorio de nivel superior (...)
os.sep genera el separador de ruta específico del sistema operativo (\ bajo win, / bajo Linux) os.linesep es utilizado por la plataforma actual El terminador de línea (\ r \ n bajo win, \ n bajo Linux) os.name se refiere al sistema operativo utilizado actualmente (incluyendo: 'mac', 'nt')

import os

print(os.curdir)  # .
print(os.pardir)  # ..
print(os.sep)  # \
print(os.linesep)
print(os.name)  # nt

os.path.basename (ruta) elimina la ruta del directorio y devuelve solo el nombre del archivo os.path.dirname (ruta) elimina el nombre del archivo y devuelve solo la ruta del directorio os.path.join (ruta1 [, ruta2 [,…] ]) será ruta1, cada parte de ruta2 se combina en un nombre de ruta os.path.split (ruta) para dividir el nombre del archivo y la ruta, y devolver la tupla (f_path, f_name). Si el directorio se usa por completo, separará el último directorio como nombre de archivo y no determinará si el archivo o directorio existe.
os.path.splitext (ruta) separa el nombre del archivo y la extensión, y devuelve una tupla de (f_path, f_name).

import os

# 返回文件名
print(os.path.basename(r'C:\test\lsgo.txt'))  # lsgo.txt
# 返回目录路径
print(os.path.dirname(r'C:\test\lsgo.txt'))  # C:\test
# 将目录和文件名合成一个路径
print(os.path.join('C:\\', 'test', 'lsgo.txt'))  # C:\test\lsgo.txt
# 分割文件名与路径
print(os.path.split(r'C:\test\lsgo.txt'))  # ('C:\\test', 'lsgo.txt')
# 分离文件名与扩展名
print(os.path.splitext(r'C:\test\lsgo.txt'))  # ('C:\\test\\lsgo', '.txt')

os.path.getsize (archivo) devuelve el tamaño del archivo especificado en bytes. os.path.getatime (archivo) devuelve la última hora de acceso del archivo especificado os.path.getctime (archivo) devuelve la hora de creación del archivo especificado os.path.getmtime (archivo) devuelve la última hora de modificación del archivo especificado en segundos de punto flotante, se puede convertir con la función gmtime () o localtime () del módulo de tiempo

import os
import time

file = r'.\lsgo.txt'
print(os.path.getsize(file))  # 30
print(os.path.getatime(file))  # 1565593737.347196
print(os.path.getctime(file))  # 1565593737.347196
print(os.path.getmtime(file))  # 1565593797.9298275
print(time.gmtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=7, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)
print(time.localtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=15, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)

os.path.exists (ruta) determina si existe la ruta especificada (directorio o archivo) os.path.isabs (ruta) determina si la ruta especificada es una ruta absoluta
os.path.isdir (ruta) determina si existe la ruta especificada y es un directorio os.path.isfile (ruta) juzga si la ruta especificada existe y es un archivo os.path.islink (ruta) juzga si la ruta especificada existe y es un enlace simbólico os.path.ismount (ruta) juzga si la ruta especificada existe y es Un punto colgante os.path.samefile (ruta1, ruta2) determina si las dos rutas ruta1 y ruta2 apuntan al mismo archivo
3. Serialización y deserialización
El módulo pickle de Python implementa la secuencia de datos básica y la deserialización.
Mediante la operación de serialización del módulo pickle, podemos guardar la información del objeto que se ejecuta en el programa en un archivo para su almacenamiento permanente.
A través de la operación de deserialización del módulo pickle, podemos crear el objeto guardado por el último programa del archivo. La función más utilizada en el módulo pickle es: pickle.dump (obj, archivo, [, protocolo]) serializa el objeto obj en el archivo abierto.
obj: el objeto obj que desea serializar. archivo: nombre del archivo.
protocolo: el protocolo utilizado para la serialización. Si se omite este elemento, el valor predeterminado es 0. Si es negativo o HIGHEST_PROTOCOL, se utiliza la versión de protocolo más alta. pickle.load (archivo) Serializar y leer los objetos en el archivo. archivo: nombre del archivo.

import pickle

dataList = [[1, 1, 'yes'],
            [1, 1, 'yes'],
            [1, 0, 'no'],
            [0, 1, 'no'],
            [0, 1, 'no']]
dataDic = {
    
    0: [1, 2, 3, 4],
           1: ('a', 'b'),
           2: {
    
    'c': 'yes', 'd': 'no'}}

# 使用dump()将数据序列化到文件中
fw = open(r'.\dataFile.pkl', 'wb')

# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)

# Pickle dictionary using protocol 0.
pickle.dump(dataDic, fw)
fw.close()

# 使用load()将数据从文件中序列化读出
fr = open('dataFile.pkl', 'rb')
data1 = pickle.load(fr)
print(data1)
data2 = pickle.load(fr)
print(data2)
fr.close()

# [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
# {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}

Preguntas de práctica:
1. El archivo abierto que viene con Python puede especificar la codificación del texto. La codificación puede especificar el texto
abierto (archivo, modo = 'r', almacenamiento en búfer = Ninguno, codificación = Ninguno, errores = Ninguno, nueva línea = Ninguno , closefd = True) codificación

Supongo que te gusta

Origin blog.csdn.net/m0_45672993/article/details/107881803
Recomendado
Clasificación