Dans ce blog, nous discuterons des opérations de fichiers en Python de manière complète et approfondie. Les opérations sur les fichiers font partie intégrante de la programmation Python, qui comprend diverses opérations telles que l'ouverture, la lecture, l'écriture et la fermeture de fichiers. Nous expliquerons des opérations de base sur les fichiers aux compétences avancées en traitement de fichiers, et comment utiliser Python pour les opérations sur les fichiers avec élégance. Dans chaque partie, nous partagerons des utilisations uniques, avec des exemples de code spécifiques et des résultats de sortie. À la fin de l'article, nous partagerons également quelques astuces de manipulation de fichiers peu connues mais très utiles.
Vidéo de combat réel du projet de la station B : Tests automatisés Python : 60 projets de combat réels, vous apprendre étape par étape
Opérations de base sur les fichiers : ouverture, lecture, écriture et fermeture de fichiers
Python utilise une fonction intégrée open()
pour ouvrir un fichier, qui renvoie un objet fichier, et les modes communs sont les suivants : 'r' signifie lire, 'w' signifie écrire (le fichier d'origine sera d'abord effacé), 'a' signifie ajouter, 'b' indique le mode binaire. En particulier, nous pouvons utiliser with
des mots-clés pour que le dossier soit automatiquement fermé lorsque nous aurons terminé.
# 以读取模式打开一个文件
with open('file.txt', 'r') as file:
content = file.read()
print(content)
Lorsque vous exécutez ce code, hypothétiquement file.txt
, Hello, Python!
vous verrez le résultat suivant :
Hello, Python!
Lecture de fichiers : contrôle fin
Au lieu de lire l'intégralité du fichier en une seule fois, nous pouvons également lire le fichier en unités plus petites. Ceci est très utile lorsqu'il s'agit de fichiers volumineux pour contrôler efficacement l'utilisation de la mémoire.
with open('file.txt', 'r') as file:
while True:
line = file.readline()
if not line:
break
print(line, end='')
Ce code lit file.txt
le contenu du fichier ligne par ligne et l'imprime. où , end=''
est d'empêcher print
la fonction d'insérer une nouvelle ligne après chaque impression, puisque chaque ligne lue à partir du fichier a déjà une nouvelle ligne.
Écriture de fichier : ajout et écrasement de contenu
Nous utilisons le mode écriture ('w') ou le mode ajout ('a') pour écrire dans le fichier. \n
Voici une petite astuce : si votre programme doit écrire fréquemment dans le fichier, il est plus efficace d'utiliser une nouvelle ligne lors de l'écriture que d'utiliser write()
une fonction, puis d'utiliser write('\n')
une fonction pour insérer une nouvelle ligne.
with open('file.txt', 'a') as file:
file.write('Hello, Python!\n')
Ce code file.txt
ajoutera une ligne à la fin du fichier Hello, Python!
.
Gestion de fichiers plus avancée : os
et shutil
modules
os
Les modules et modules Python shutil
nous fournissent des fonctions de manipulation de fichiers plus avancées, telles que renommer des fichiers, supprimer des fichiers, créer
répertoires, copier des fichiers, 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')
L'exécution de ce code effectuera les opérations de fichier ci-dessus dans l'ordre.
Encodage de fichiers : gérer les fichiers avec différents formats d'encodage
Lorsque nous traitons des fichiers, nous pouvons rencontrer divers formats d'encodage, tels que UTF-8, ASCII, ISO-8859-1, etc. La fonction de Python open()
nous permet encoding
de spécifier la méthode d'encodage du fichier via des paramètres.
with open('file.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
Si vous essayez de lire un fichier texte qui contient des caractères non-ASCII, mais que vous ne fournissez pas le paramètre d'encodage correct, Python peut lancer UnicodeDecodeError
. Dans ce cas, vous devez connaître le format d'encodage correct du fichier afin de lire correctement le fichier.
# 尝试读取一个包含非ASCII字符的文件,但没有指定正确的编码格式
try:
with open('file.txt', 'r') as file:
content = file.read()
except UnicodeDecodeError:
print("UnicodeDecodeError occurred!")
Ce code intercepte UnicodeDecodeError
et imprime un message d'erreur.
Gestion des exceptions de fichiers : assurer la robustesse du code
Dans l'opération de fichier, nous pouvons rencontrer diverses conditions anormales, telles que le fichier n'existe pas, il n'y a pas d'autorisation de lecture/écriture, etc. Nous pouvons utiliser le mécanisme de gestion des exceptions de Python pour intercepter ces exceptions et les traiter en conséquence.
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!')
Ce code capture FileNotFoundError
et PermissionError
, et imprime le message d'erreur correspondant, respectivement.
pickle
Sérialisation et désérialisation d'objets à l'aide de
Les modules de Python pickle
fournissent des fonctions pour convertir des objets dans un format qui peut être stocké dans un fichier ou transmis sur un réseau (un processus appelé sérialisation), et reconstruire des objets à partir de ce format (un processus appelé désérialisation). C'est un moyen très pratique d'enregistrer et de charger des objets 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)
Exécutez ce code et vous verrez le résultat suivant :
{'name': 'John', 'age': 30, 'pets': ['cat', 'dog']}
Il s'agit de l' data
objet dictionnaire d'origine.
gestion des chemins d'accès aux fichiers
Lorsqu'ils traitent des chemins de fichiers, os.path
les modules de Python fournissent une série de fonctions pour analyser, construire et modifier les chemins de fichiers. Ces fonctions sont multiplateformes, vous pouvez donc les utiliser en toute sécurité, que votre programme s'exécute sous 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}')
En supposant qu'il file.txt
se trouve /home/user/documents/
dans un répertoire, l'exécution de ce code affichera :
Absolute path: /home/user/documents/file.txt
Directory: /home/user/documents
Base name: file.txt
Root: file, Extension: .txt
Encore une chose : parcourir et rechercher des fichiers
Le module de Python os
fournit une os.walk()
fonction, qui est un outil facile à utiliser mais puissant pour générer des noms de fichiers dans des arborescences de répertoires. Combiné avec fnmatch
des modules, nous pouvons implémenter des recherches de correspondance de modèles pour les fichiers.
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
En supposant qu'il y ait trois fichiers , file2.txt
, dans le répertoire courant et ses sous-répertoires sub/file3.txt
, l'exécution de ce code affichera :
['./file1.txt', './file2.txt', './sub/file3.txt']
Nous espérons que vous pourrez acquérir diverses compétences de manipulation de fichiers Python à partir de ce blog et que vous pourrez jouer un rôle dans votre parcours de programmation Python. Si vous avez des questions ou des idées, veuillez laisser un message pour communiquer.
Merci à tous ceux qui ont lu attentivement mon article, même si ce n'est pas une chose très précieuse, si vous pouvez l'utiliser, vous pouvez l'emporter :
Ces matériaux devraient être l'entrepôt de préparation le plus complet et le plus complet pour les amis [testeurs de logiciels]. Cet entrepôt a également accompagné des dizaines de milliers d'ingénieurs de test tout au long du voyage le plus difficile. J'espère qu'il pourra vous aider aussi !