Bonjour,

Je ne comprends pas d'où vient la différence entre 2 manières d'extraire un fichier d'une archive .tar

Voici un bout de code qui montre mon problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
import os, tarfile, hashlib
path = "/home/test/"
tar_file = "/home/test/tar.tar"
filename = "fichier.txt"
filename2 = "fichier2.txt"
filename3 = "fichier3.txt"
 
def md5sum(filename):
    try:
        f = open(filename, "rb")
    except Exception as e:
        print(e)
        return ""
    md5 = hashlib.md5()
    data = f.read(128)
    while data:
        md5.update(data)
        data = f.read(128)
    f.close()
    return md5.hexdigest()
 
with tarfile.open(tar_file, "w") as tar:
    tar.add(path+filename, arcname=filename3)
    print(md5sum(path+filename))
 
with tarfile.open(tar_file, "r") as tar:
    member = tar.getmember(filename3)
    data = tar.extractfile(member).read()
    with open(path+filename2, "w") as f:
        f.write(data)
    print(md5sum(path+filename2))
 
 
    tar.extract(member, path=path)
    print(md5sum(path+filename))
Seul le md5 de la méthode "tar.extract(member, path=path)" est correct

Qu'est ce qui cloque en passant par read() ?

D'avance merci