147 votes

fonction seek() ?

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.

259voto

Nicolás Points 2418

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)

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.

47voto

DGH Points 3284

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.

3voto

user1767754 Points 460

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 comme seek .

2voto

Gordon Graham Points 21

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X