python modifier un fichier texte se trouvant dans une archive tar

a marqué ce sujet comme résolu.

Bonjour, je bloque sur un probleme, peut on modifier un fichier texte se trouvant dans uen archiuve tar ?

mon but serais de rajouter une chaine de caractere

1
data="ligne à ajouter au fichier texte"

à la fin d’un fichier texte se trouvant dans /monfichier.tar/mondossier/monfichier.txt

sans décompresser ce fichier dans un répertoire, écrire dessus et refaire un tar.addfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
tar = tarfile.open("./myimage.tar")
f = tar.extractfile("./mondisser/monfichier.txt")
f = f.read()
tar.close()
  
f=f+"\n new line"
  
with tarfile.open("./myimage.tar",mode='w') as image:
    file2=image.gettarinfo(arcname=None, fileobj=f)
    image.addfile(file2)
    image.close

tar.extractfile semble me retourner une chaîne de caractère pas un objet fichier, es possible d’avoir un objet fichier pour pouvoir ensuite le re-insérer dans mon archive tar ?

+0 -0

Il n’y a rien d’automatique dans la lib standard pour ça. La raison est qu’un fichier tar est une concaténation des fichiers : en modifier un veux dire ré-écrire tous les fichiers qui sont à la suite (contrairement à zip par exemple qui peut écrire un fichier en plusieurs morceaux, il me semble).

oui j’ai enfin réussie.

je bloque sur un autre point par contre, comment je rajoute mon fichier à l’archive…

1
2
3
4
5
data = 'hello, world!'
tarinfo = tarfile.TarInfo('./myfile')
tarinfo.size = len(data)
archive = tarfile.open("file.tar", "a", dereference=True)
archive.addfile(tarinfo, StringIO.StringIO(data))

il me crée un 2ieme fichier du meme nom (myfile) sans supprimer l’ancien.existe t’il un parametre pour supprimer ce fichier ou bien l’écraser ? j’ai essayer avec archive.remove() j’ai l’erreur suivante : AttributeError: ’TarFile’ object has no attribute ’remove’

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte