Outils pour utilisateurs

Outils du site


fichier_acces_direct

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
fichier_acces_direct [2008/12/21 09:22]
tyrtamos
fichier_acces_direct [2010/10/28 15:43]
tyrtamos
Ligne 45: Ligne 45:
  
 C'est assez facile pour l'​enregistrement de chaines de caractères,​ à une exception près: attention aux encodages unicode qui "​consomment"​ plus de place en octets qu'il n'y a de caractères imprimables! Il serait d'​ailleurs sage qu'il y ait dans le code en même temps une vérification/​alerte de dépassement et un tronquage pour éviter qu'une chaine trop longue ne recouvre le début de l'​enregistrement suivant. C'est assez facile pour l'​enregistrement de chaines de caractères,​ à une exception près: attention aux encodages unicode qui "​consomment"​ plus de place en octets qu'il n'y a de caractères imprimables! Il serait d'​ailleurs sage qu'il y ait dans le code en même temps une vérification/​alerte de dépassement et un tronquage pour éviter qu'une chaine trop longue ne recouvre le début de l'​enregistrement suivant.
- 
-Si vous voulez évaluer le nombre d'​octets nécessaire pour stocker une chaine encodée en utf-8, sur la base de statistiques,​ vous pouvez créer cette fonction: 
- 
-<code python> 
-def lenunic(ch):​ 
-    n = 0 
-    for c in ch: 
-        n += 1 + int((ord(c) > 255)) 
-    return n 
- 
-x = u"​éèàçôîêöùλ"​ 
-print len(x) # => affiche 10 (il y a bien 10 lettres) 
-print lenunic(x) ​ # => affiche 11, car les 10 lettres codées en utf-8 prendront 11 octets à cause de la dernière lettre "​λ":​ ord(u"​λ"​)=955 
-</​code>​ 
  
 Pour conserver cette longueur d'une session à l'​autre,​ quand il n'y a qu'un seul programme qui accède au fichier, on peut la conserver dans le programme en la codant "en dur" (exemple: lge = 25). Pour conserver cette longueur d'une session à l'​autre,​ quand il n'y a qu'un seul programme qui accède au fichier, on peut la conserver dans le programme en la codant "en dur" (exemple: lge = 25).
Ligne 136: Ligne 122:
     * fin = f.tell() renvoie cette position     * fin = f.tell() renvoie cette position
     * => on sait donc jusqu'​où on peut lire: on doit s'​arrêter quand i*lge>​=fin!     * => on sait donc jusqu'​où on peut lire: on doit s'​arrêter quand i*lge>​=fin!
-    * et on sait aussi qu'il y a déjà: fin//lge enregistrements dans le fichier+    * et on sait aussi qu'il y a déjà: ​%%fin//lge%% enregistrements dans le fichier
  
   * vous voyez l'​utilisation de .rstrip() pour éliminer les octets de remplissage   * vous voyez l'​utilisation de .rstrip() pour éliminer les octets de remplissage
fichier_acces_direct.txt · Dernière modification: 2010/10/28 15:43 par tyrtamos