Maison >développement back-end >Tutoriel Python >Introduction détaillée au traitement de fichiers en python
Si vous souhaitez exploiter un fichier sur le disque dur en python, il peut être grossièrement divisé en trois étapes :
Utilisez la fonction open pour ouvrir un descripteur de fichier et attribuez-le. à une variable.
Utilisez le fichier spécifié via le descripteur de fichier correspondant.
Fermez le fichier une fois l'opération terminée. Une fois le fichier fermé, le contenu du fichier sera écrit sur le disque.
La méthode d'utilisation de la fonction open est la suivante.
open('file path',mode='mode to open file',encoding='file encoding method')
Chemin du fichier : ce chemin de fichier peut être un chemin absolu ou un chemin relatif , en python, il vous suffit d'écrire le nom du fichier pour le chemin relatif. Si le programme python et le fichier à ouvrir se trouvent dans le même répertoire, utilisez simplement le chemin relatif directement.
Attention ! Si vous souhaitez utiliser la fonction open, le chemin du fichier est un paramètre nécessaire et ne peut être omis !
Mode d'ouverture des fichiers : Il existe un paramètre formel facultatif dans la fonction open, qui est mode, qui est utilisé pour définir le mode d'ouverture du fichier. Si le mode d'ouverture du fichier n'est pas spécifié, r (lecture. -only) sera utilisé par défaut pour ouvrir le fichier.
Les méthodes d'ouverture de fichiers courantes fournies en python sont les suivantes :
'r' ouvre le fichier en mode lecture seule. Utilisez r (mode lecture seule) pour ouvrir le fichier. Le fichier peut uniquement être lu et ne peut pas être modifié en écriture. (Si le fichier n'existe pas, une exception sera levée)
'w' ouvre le fichier en mode écriture seule. Utilisez w (mode écriture seule) pour ouvrir le fichier. écrit, pas lu, mais il y a une chose qui doit être spéciale. Remarque ! ! ! ! ! Une fois qu'un fichier avec le contenu original est ouvert à l'aide de w, le contenu du fichier sera effacé ! ! (Quant à la raison, je l'ajouterai plus tard dans cet article.) (Si vous ne voulez pas que le contenu original du fichier soit effacé !! Alors n'utilisez jamais le mode w !!!!!!) (Lorsque le fichier n'existe pas, un fichier sera créé. Si le fichier existe, le contenu du fichier sera effacé en premier)
Le mode d'ajout 'a' est également un mode en écriture seule, utilisé pour ajouter du contenu à la fin de le prix demandé et le contenu écrit seront ajoutés à la fin du fichier
'b' Mode binaire, utilisez le mode binaire pour ouvrir le fichier, faites attention ! Ce « b » (mode binaire) est à utiliser en combinaison avec les trois modes (r, w, a). (Ce mode est recommandé pour les systèmes multiplateformes et multi-exploitations)
'r' Lisible et inscriptible (Dans ce mode, bien qu'il soit lisible et inscriptible, vous devez faire attention lors de l'écriture, le pointeur de recherche est toujours dans le fichier Si vous commencez à écrire directement sans ajuster la position du pointeur de recherche, vous commencerez directement à écraser le contenu précédemment écrit (en commençant par l'en-tête du fichier). Par conséquent, lorsque vous utilisez le mode r, vous devez faire attention au contenu. position du pointeur de recherche. Où dans le fichier ! Sinon, le contenu original sera écrasé)
'w 'Inscriptible et lisible (ce mode n'est généralement pas utilisé, et le fichier sera effacé directement)
' a 'Ajouter à la fin, inscriptible et lisible
1. Méthodes courantes d'exploitation des objets fichier
Lire les fichiers :
readable() est utilisé pour déterminer si le fichier est lisible, renvoie True s'il est lisible, False sinon.
readline() lit le fichier une ligne à la fois et renvoie le type de chaîne.
read() lit tout le contenu du fichier en même temps et renvoie une chaîne entière.
readlines() lit tout le contenu du fichier et ajoute chaque ligne du fichier à une liste. Chaque ligne du fichier sera utilisée comme élément dans la liste.
Écrire un fichier :
writable() : Déterminez si le fichier est accessible en écriture, renvoie True, sinon renvoie False.
write() : Écrire le contenu dans le fichier. Cette méthode ne peut être utilisée que lorsque le fichier est en mode écriture. L'emplacement spécifique du fichier à écrire dépend du mode d'ouverture du fichier (r+ Ou. a ou w) Cela dépend également de l'endroit où pointe le pointeur de recherche actuel dans le fichier. (De plus, lorsque vous utilisez la méthode write pour écrire du contenu à l'intérieur d'un fichier, il n'y a pas de caractère de nouvelle ligne. Vous devez ajouter un caractère de nouvelle ligne manuellement, sinon tout le contenu sera collé ensemble.)
Exemple : f1.write(' hello!n') #n est le caractère de nouvelle ligne.
writelines() : Semblable à wirte, il écrit le contenu à l'intérieur du fichier. Différente de write, writelines utilise la forme d'une liste pour écrire le contenu à l'intérieur du fichier. python fera une boucle de liste, chaque élément de la liste est écrit dans le fichier.
Attention ! Lorsque vous utilisez des lignes d'écriture pour écrire du contenu dans le fichier, il n'y a pas de caractère de nouvelle ligne. Si vous ajoutez un caractère de nouvelle ligne à la fin de chaque élément, alors chaque élément de la liste est une ligne dans le fichier.
Attention ! ! Le contenu écrit dans le fichier ne peut être que des chaînes, pas d'autres types ! ! Sinon, une exception sera levée Même si un nombre doit être écrit, le nombre doit être converti en type chaîne ! ! !
Autres opérations :
close() pour fermer le fichier Lorsque le fichier est lu ou écrit, assurez-vous d'utiliser close pour fermer le fichier ! (Sauf pour l'utilisation de la syntaxe with, car l'utilisation du mot-clé with pour ouvrir un fichier fermera automatiquement le fichier une fois l'opération sur le fichier terminée).
Si vous ne fermez pas le fichier après l'avoir lu, le programme continuera à occuper les ressources système.
Si vous ne fermez pas le fichier après l'avoir écrit, le contenu de la mémoire ne sera pas synchronisé avec le disque dur à temps. Si vous souhaitez écrire complètement le contenu sur le disque dur, sinon utilisez close pour fermer le fichier. Sinon, utilisez la méthode de vidage. Forcez le vidage des données de la mémoire sur le disque dur.
flush() vide de force les données de la mémoire qui n'ont pas été écrites sur le disque dur sur le disque dur.
encoding : affiche l'encodage du fichier ouvert (cette méthode n'est pas disponible en python2, mais peut être utilisée en python3.)
tell() : vous pouvez obtenir la position du fichier actuel chercher un pointeur.
seek (position du pointeur, mode) déplace le pointeur de recherche vers la position dans le fichier en octets.
Il existe trois modes pour faire fonctionner le pointeur de recherche dans pyrhon Ce qui suit est une introduction détaillée à ces trois modes :
file.seek(n,0)#n représente le pointeur La position. de , le chiffre 0 derrière représente le numéro de série du mode.
file.seek(n,0) : (Mode 0) Le mode 0 représente la position absolue lorsque n est le nombre, le pointeur sera déplacé vers le comptage d'octets depuis le début du fichier. (Lors de l'utilisation de la recherche, si vous ne spécifiez pas de mode, le mode par défaut est 0.)
Par exemple, file.seek(3,0) déplace le pointeur vers le début du fichier (0ème octet) Numéro de départ, position sur trois octets.
#Avant d'utiliser les pointeurs
f1 = open('seasons.lrc',mode='r')
print f1.readline()
>>>Hamazaki あゆみ- Saisons
#Ce qui suit consiste à utiliser le mode 0, à déplacer le pointeur sur le 3ème octet du fichier, à déplacer le pointeur sur le 3ème octet, puis à lire le fichier, le le fichier sera lu en commençant derrière le pointeur.
f1 = open('seasons.txt',mode='r')
print f1.tell() #Afficher la position actuelle du pointeur de recherche
> ; >>0 # (La position est 0, ce qui signifie que le pointeur est au début du fichier)
f1.seek(3,0) # (Déplacez le pointeur vers le troisième octet, utilisez 0 mode, position absolue)
print f1.tell() #Vérifiez à nouveau la position du pointeur, vous pouvez vérifier que la position du pointeur a bien été déplacée vers le troisième octet.
>>>3
print f1.readline() #Lire une ligne à partir de la position du pointeur actuel.
>> Après les octets, pourquoi un caractère est-il ignoré ?
Vous devez comprendre ce que sont les caractères et les octets. Vous devez être clair sur ce concept ! ! Dans le codage de caractères UTF-8, un caractère chinois occupera trois octets. Le contenu original de la première ligne est "Hamazaki Yumi-Season". Comme un caractère chinois occupe trois octets, le pointeur est déplacé vers l'arrière de trois octets, ce qui se produit. être la position d'un caractère chinois. Le pointeur est déplacé derrière "浜". Lors de la lecture du fichier, il commence à lire derrière ce caractère, ce qui est donc affiché est "恂あゆみ- Seasons". (Un caractère japonais occupe également trois octets dans le codage de caractères UTF-8.)
Je donnerai un exemple plus tard. Cet exemple peut vous aider à comprendre la signification de « position absolue ».
f1 = open('seasons.lrc',mode='r')
print f1.tell() #Après l'ouverture du fichier, la position par défaut du pointeur est 0.
>>>0
f1.seek(3,0) #Déplacez le doigt à la position de 3 octets dans le fichier.
imprimer f1.tell()
>>>3
f1.seek(3,0)
imprimer f1.tell( )
>>>3
file.seek(n,1) : (Mode 1) Mode 1, position relative, n représente le recul du pointeur à l'heure actuelle positionner les octets.
Si vous pensez que ce que je dis n'est pas facile à comprendre, vous comprendrez peut-être après avoir lu les exemples ci-dessous.
f1 = open('seasons.lrc',mode='r')
print f1.tell() #Après l'ouverture du fichier, la position par défaut du pointeur est 0.
>>>0
f1.seek(3,1) #Déplacez le pointeur de 3 octets vers l'arrière.
print f1.tell()
>>>3 #Le pointeur se déplace vers la position du 3ème octet.
f1.seek(3,1) #Voici le point clé, déplacez le pointeur de 3 octets vers l'arrière (ici vous pouvez comparer la différence entre le mode 1 et le mode 0.)
print f1 .tell()
>>>6 #La position du pointeur est sur le 6ème octet, ce qui montre aussi qu'à chaque fois que le mode 1 bouge, il ne démarre pas à partir de Il démarre depuis le début du fichier et recule en fonction de l'endroit où se trouvait le pointeur en dernier. (C'est ce que signifie « position relative ».)
Si vous ne comprenez toujours pas, lisez le supplément ci-dessous.
Enfin, permettez-moi d'ajouter :
f1.seek(3,0) signifie déplacer le pointeur vers le troisième octet du fichier. (Position absolue)
f1.seek(3,1) signifie déplacer le pointeur de 3 octets vers l'arrière par rapport à la position actuelle. (Position relative)
file.seek(-n,2) : Utilisez la position absolue, en commençant par la fin du fichier et en vous déplaçant vers le début du fichier. (Lors de l'utilisation du mode 2, il convient de noter que la position du mouvement du pointeur ne peut être qu'un nombre négatif, car il commence par la fin et avance !)
Ce qui suit est un exemple :
#Ouvrez un fichier , utilisez la méthode read pour lire du début à la fin du fichier. Lorsque le fichier est lu, le pointeur reviendra naturellement à la fin du fichier.
f1 = open('seasons.txt',mode='r')
print f1.tell()
>>>0
f1.read()
print f1.tell()
>>>756
Maintenant, nous savons grâce à la méthode ci-dessus que la fin du fichier est le fichier Les premiers octets de .
Testons si la fonction à 2 modes de la méthode de recherche est comme mentionné précédemment, en commençant par la fin du fichier et en passant au début du fichier.
f1 = open('seasons.txt',mode='r')
print f1.tell()
>>>0
f1.seek(-1,2) #Utilisez le mode 2 de recherche pour avancer le pointeur d'1 octet à partir de la fin du fichier
print f1.tell()
>>>755
#La fin du fichier est 756, avancer d'un octet est 755, et nous obtenons l'effet souhaité.
En fait, les 2 modes de la méthode de recherche sont très utiles. Ce qui suit est une description détaillée des 2 modes de la méthode de recherche.
Pour obtenir la 1ère à la Nième ligne à partir de la dernière ligne du fichier, vous pouvez utiliser le mode 2 de la méthode de recherche.
À ce moment-là, quelqu'un peut demander, n'est-ce pas une opération très simple de supprimer la dernière ligne du fichier ? Utilisez simplement la méthode readlines pour lire le fichier, puis prenez le dernier élément, et ensuite vous pouvez obtenir la dernière ligne. Cette méthode ne serait-elle pas plus simple ?
Comme ça.
f1 = open('seasons.txt',mode='r')
print f1.readlines()[-1]
>>> La dernière ligne du fichier a effectivement été supprimée, mais y avez-vous déjà pensé ? L'essence de l'utilisation de readlines pour lire un fichier est de lire chaque ligne du fichier dans la mémoire si le fichier est particulièrement volumineux, par exemple 10 Go. ou 100G, et est trop volumineux pour être stocké dans la mémoire actuelle, cette méthode n'est pas applicable.
La méthode suivante est particulièrement adaptée aux fichiers volumineux.
f1 = open('seasons.txt',mode='r')
for i in f1: #Le descripteur de fichier de boucle Direct for ne lira pas tous les fichiers en même temps, mais lit une ligne du fichier.
line_bytes = -36
while True :
f1.seek(line_bytes,2)
data = f1.readlines()
if len(data) > 1 :
imprimer les données[-1]
break
else :
line_bytes * 2
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!