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 with
palavras-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.txt
o conteúdo do arquivo linha por linha e os imprime. onde , end=''
serve para evitar print
que 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. \n
Aqui 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.txt
acrescentará uma linha ao final do arquivo Hello, Python!
.
Manuseio de arquivos mais avançado: os
e shutil
módulos
os
Os módulos e módulos Python shutil
nos 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 encoding
especificar 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 UnicodeDecodeError
e 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 FileNotFoundError
e PermissionError
imprime a mensagem de erro correspondente, respectivamente.
pickle
Serialização e desserialização de objetos usando
Os módulos do Python pickle
fornecem 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 data
objeto de dicionário original.
manipulação de caminho de arquivo
Ao lidar com caminhos de arquivo, os.path
os 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.txt
esteja /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 os
fornece 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 fnmatch
mó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.txt
Supondo que existam três arquivos , file2.txt
, no 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!