2010-12-08 81 views
6

Je rencontre des problèmes lors de l'ajout de données dans un fichier binaire. Quand je cherche() à un emplacement, alors écrivez() à cet endroit et lisez alors le dossier entier, je trouve que les données n'ont pas été écrites à l'endroit que je voulais. Au lieu de cela, je le trouve juste après toutes les autres données/textes.Comment rechercher et ajouter à un fichier binaire en python?

Mon code

file = open('myfile.dat', 'wb') 
file.write('This is a sample') 
file.close() 

file = open('myfile.dat', 'ab') 
file.seek(5) 
file.write(' text') 
file.close() 

file = open('myfile.dat', 'rb') 
print file.read() 

#prints: This is a sample **text** 

Vous pouvez voir que Seek ne fonctionne pas. Comment puis-je résoudre cela, existe-t-il d'autres moyens d'y parvenir?

Merci

Répondre

15

Sur certains systèmes, 'ab' forces toutes les écritures passer à la fin du fichier. Vous voulez probablement 'r+b'.

+2

De la documentation pour la méthode 'seek': « Si le fichier est ouvert uniquement pour l'écriture en mode append (mode « a »), cette méthode est essentiellement un pas -op, " – bgporter

+0

@bgporter: Soutenez-vous ou réfutez-vous quelque chose que j'ai dit? Je ne peux honnêtement pas le dire. –

+0

Désolé - soutenir! Juste en ajoutant le texte réel des docs, essayant de clarifier (mais évidemment échouant ..) – bgporter

1

Ne pas utiliser la commande de recherche. Vous avez déjà ouvert le fichier pour append avec 'a'.

+2

A en juger par l'exemple de code, je ne pense pas que l'OP souhaite ajouter à la fin du fichier. –

+1

Vous avez peut-être raison, mais j'ai supposé que le résultat devrait être "Ceci est un exemple de texte". :) – Paul

+0

Je pense que cela devrait être la réponse acceptée. ''r + b' 'ne fonctionne que pour OP en raison de la commande' seek'. – hitzg

2

r + b doivent travailler comme vous le souhaitez