Domine as operações de arquivo Python: exploração completa do básico ao avançado

Neste blog, discutiremos operações de arquivo em Python de forma abrangente e aprofundada. As operações de arquivo são parte integrante da programação Python, que inclui várias operações, como abrir, ler, escrever e fechar arquivos. Explicaremos desde operações básicas de arquivo até habilidades avançadas de processamento de arquivo e como usar o Python para operações de arquivo com elegância. Em cada parte, compartilharemos alguns usos exclusivos, com código de amostra específico e resultados de saída. No final do artigo, também compartilharemos algumas dicas de manipulação de arquivos pouco conhecidas, mas muito úteis.

Vídeo de combate real do projeto da estação B: teste automatizado do Python: 60 projetos de combate reais, ensinam passo a passo

Operações básicas de arquivo: abrir, ler, escrever e fechar arquivos

Python usa uma função interna open()para abrir um arquivo, que retorna um objeto de arquivo, e os modos comuns são os seguintes: 'r' significa leitura, 'w' significa gravação (o arquivo original será limpo primeiro), 'a' significa anexar, 'b' indica o modo binário. Em particular, podemos usar withpalavras-chave para que o arquivo seja fechado automaticamente quando terminarmos.

# 以读取模式打开一个文件
with open('file.txt', 'r') as file:
    content = file.read()
print(content)

Ao executar esse código, hipoteticamente file.txt, Hello, Python!você verá a seguinte saída:

Hello, Python!

Leitura de arquivos: controle refinado

Em vez de ler o arquivo inteiro de uma vez, também podemos ler o arquivo em unidades menores. Isso é muito útil ao lidar com arquivos grandes para controlar efetivamente o uso da memória.

with open('file.txt', 'r') as file:
    while True:
        line = file.readline()
        if not line:
            break
        print(line, end='')

Este código lê file.txto conteúdo do arquivo linha por linha e os imprime. onde , end=''serve para evitar printque a função insira uma nova linha após cada impressão, pois toda linha lida do arquivo já possui uma nova linha.

Gravação de arquivo: anexação e substituição de conteúdo

Usamos o modo de gravação ('w') ou o modo de acréscimo ('a') para gravar no arquivo. \nAqui está um pequeno truque: se o seu programa precisa escrever no arquivo com frequência, é mais eficiente usar uma nova linha ao escrever do que usar write()uma função e depois usar write('\n')uma função para inserir uma nova linha.

with open('file.txt', 'a') as file:
    file.write('Hello, Python!\n')

Este código file.txtacrescentará uma linha ao final do arquivo Hello, Python!.

Manuseio de arquivos mais avançado: ose shutilmódulos

osOs módulos e módulos Python shutilnos fornecem funções de manipulação de arquivos mais avançadas, como renomear arquivos, excluir arquivos, criar

diretórios, copiar arquivos, etc.

import os
import shutil

# 创建一个新的目录
os.mkdir('new_folder')

# 重命名文件
os.rename('old.txt', 'new.txt')

# 复制文件
shutil.copy2('src.txt', 'dst.txt')

# 删除文件
os.remove('file_to_delete.txt')

A execução desse código executará as operações de arquivo acima em sequência.

Codificação de arquivo: lida com arquivos com diferentes formatos de codificação

Ao lidar com arquivos, podemos encontrar vários formatos de codificação, como UTF-8, ASCII, ISO-8859-1, etc. A função do Python open()nos permite encodingespecificar o método de codificação do arquivo por meio de parâmetros.

with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()
print(content)

Se você tentar ler um arquivo de texto que contém caracteres não ASCII, mas não fornecer o parâmetro de codificação correto, o Python poderá lançar UnicodeDecodeError. Nesse caso, você precisa saber o formato de codificação correto do arquivo para ler o arquivo corretamente.

# 尝试读取一个包含非ASCII字符的文件,但没有指定正确的编码格式
try:
    with open('file.txt', 'r') as file:
        content = file.read()
except UnicodeDecodeError:
    print("UnicodeDecodeError occurred!")

Este código captura UnicodeDecodeErrore imprime uma mensagem de erro.

Manipulação de exceção de arquivo: garantindo a robustez do código

Na operação do arquivo, podemos encontrar várias condições anormais, como o arquivo não existe, não há permissão de leitura/gravação, etc. Podemos usar o mecanismo de manipulação de exceção do Python para capturar essas exceções e lidar com elas de acordo.

try:
    with open('nonexistent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print('File does not exist!')
except PermissionError:
    print('No permission to read the file!')

Este código captura FileNotFoundErrore PermissionErrorimprime a mensagem de erro correspondente, respectivamente.

pickleSerialização e desserialização de objetos usando

Os módulos do Python picklefornecem funções para converter objetos em um formato que pode ser armazenado em um arquivo ou transmitido por uma rede (um processo chamado serialização) e reconstruir objetos a partir desse formato (um processo chamado desserialização). Esta é uma maneira muito conveniente de salvar e carregar objetos Python.

import pickle

data = {
    'name': 'John',
    'age': 30,
    'pets': ['cat', 'dog']
}

# 序列化并保存到文件
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)

# 从文件加载并反序列化
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)

print(loaded_data)

Execute este código e você verá a seguinte saída:

{'name': 'John', 'age': 30, 'pets': ['cat', 'dog']}

Este é o dataobjeto de dicionário original.

manipulação de caminho de arquivo

Ao lidar com caminhos de arquivo, os.pathos módulos do Python fornecem uma série de funções para analisar, construir e modificar caminhos de arquivo. Essas funções são multiplataforma, portanto, você pode usá-las com segurança, independentemente de seu programa ser executado no Windows, macOS ou Linux.

import os

# 获取文件的绝对路径


abs_path = os.path.abspath('file.txt')
print(f'Absolute path: {abs_path}')

# 获取文件所在的目录
dir_name = os.path.dirname(abs_path)
print(f'Directory: {dir_name}')

# 获取文件的基本名和扩展名
base_name = os.path.basename(abs_path)
print(f'Base name: {base_name}')
root, ext = os.path.splitext(base_name)
print(f'Root: {root}, Extension: {ext}')

Supondo que file.txtesteja /home/user/documents/em um diretório, a execução deste código resultará em:

Absolute path: /home/user/documents/file.txt
Directory: /home/user/documents
Base name: file.txt
Root: file, Extension: .txt

Mais uma coisa: travessia e pesquisa de arquivos

O módulo do Python osfornece uma os.walk()função, que é uma ferramenta poderosa e fácil de usar para gerar nomes de arquivos em árvores de diretórios. Combinado com fnmatchmódulos, podemos implementar pesquisas de correspondência de padrões para arquivos.

import os
import fnmatch

def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in fnmatch.filter(files, pattern):
            result.append(os.path.join(root, name))
    return result

# 查找当前目录及其所有子目录中的所有.txt文件
print(find('*.txt', '.'))

file1.txtSupondo que existam três arquivos ,  file2.txtno diretório atual e seus subdiretórios sub/file3.txt, a execução deste código resultará em:

['./file1.txt', './file2.txt', './sub/file3.txt']

Esperamos que você possa aprender várias habilidades de manipulação de arquivos Python neste blog e que possa desempenhar um papel importante em sua jornada de programação em Python. Se você tiver alguma dúvida ou idéia, por favor deixe uma mensagem para se comunicar.


Obrigado a todos que leram meu artigo com atenção, embora não seja uma coisa muito valiosa, se você pode usá-lo, pode retirá-lo:

 Esses materiais devem ser o depósito de preparação mais abrangente e completo para amigos [de teste de software]. Esse depósito também acompanhou dezenas de milhares de engenheiros de teste na jornada mais difícil. Espero que possa ajudar você também!

Método de aquisição de informações:

Acho que você gosta

Origin blog.csdn.net/qq_56271699/article/details/131207859
Recomendado
Clasificación