Je vous prie d'excuser ma confusion, mais j'ai lu la documentation concernant la fonction seek() en python (après l'avoir utilisée) et, bien que cela m'ait aidé, je suis toujours un peu confus quant à la signification réelle de ce qu'elle fait. Toute explication sera appréciée, merci.
Réponses
Trop de publicités?Concernant seek()
il n'y a pas trop de raisons de s'inquiéter.
Tout d'abord, il est utile lorsqu'on travaille sur un fichier ouvert.
Il est important de noter que sa syntaxe est la suivante :
fp.seek(offset, from_what)
où fp
est le pointeur de fichier avec lequel vous travaillez ; offset
signifie le nombre de positions que vous allez déplacer ; from_what
définit votre point de référence :
- 0 : signifie que votre point de référence est le débutant du fichier
- 1 : signifie que votre point de référence est le actuel position du fichier
- 2 : signifie que votre point de référence est le fin du fichier
si elle est omise, from_what
La valeur par défaut est 0.
N'oubliez jamais que lorsque vous gérez des fichiers, il y aura toujours une position à l'intérieur de ce fichier sur laquelle vous êtes en train de travailler. À l'ouverture, cette position est le début du fichier, mais au fur et à mesure que vous travaillez avec, vous pouvez avancer.seek
vous sera utile lorsque vous devrez walk
le long de ce fichier ouvert, comme un chemin dans lequel vous vous déplacez.
Lorsque vous ouvrez un fichier, le système pointe vers le début du fichier. Toute lecture ou écriture que vous effectuez se fera depuis le début. A seek()
déplace ce pointeur vers une autre partie du fichier afin que vous puissiez lire ou écrire à cet endroit.
Ainsi, si vous souhaitez lire l'ensemble du fichier mais ignorer les 20 premiers octets, ouvrez le fichier, seek(20)
pour vous déplacer à l'endroit où vous voulez commencer la lecture, puis continuez à lire le fichier.
Ou si vous voulez lire chaque 10ème octet, vous pouvez écrire une boucle qui fait seek(9, 1)
(avance de 9 octets par rapport aux positions actuelles), read(1)
(lit un octet), répétez.
El seek
attend un décalage en octets.
Exemple de fichier Ascii :
Ainsi, si vous avez un fichier texte avec le contenu suivant :
simple.txt
abc
Tu peux sauter 1 octet pour sauter le premier caractère comme suit :
fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc
Exemple de fichier binaire largeur de collecte :
fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]
Note : Une fois que vous avez appelé
read
vous changez la position de la tête de lecture, qui agit commeseek
.
Pour les chaînes de caractères, oubliez l'utilisation de WHENCE : utilisez f.seek(0) pour vous positionner au début du fichier et f.seek(len(f)+1) pour vous positionner à la fin du fichier. Utilisez open(file, "r+") pour lire/écrire n'importe où dans un fichier. Si vous utilisez "a+", vous ne pourrez écrire (ajouter) qu'à la fin du fichier, quel que soit l'endroit où vous positionnez le curseur.