Mon formulaire de téléchargement s'attend à ce qu'un fichier tar et que je souhaite vérifier si les données téléchargées sont valides. Tarfile Module prend en charge is_tarfile () code>
, mais s'attend à un nom de fichier - Je ne veux pas gaspiller des ressources en rédaction du fichier à disque juste pour vérifier s'il est valide. p>
Y a-t-il un moyen de vérifier que les données sont un fichier tar valide sans écrire sur le disque, à l'aide des bibliothèques Python standard? P>
4 Réponses :
Le format de fichier tar est ici sur Wikipedia.
i Suspect Votre meilleur pari serait de vérifier que la somme de contrôle en-tête du premier fichier est valide. Vous pouvez également vouloir vérifier le nom du fichier pour la santé mentale mais qui peut ne pas être fiable, en fonction des noms de fichiers stockés là-bas. P>
Dupliquer les informations pertinentes ici: P>
Offset Size Description 0 100 File name 100 8 File mode 108 8 Owner's numeric user ID 116 8 Group's numeric user ID 124 12 File size in bytes 136 12 Last modification time in numeric Unix time format 148 8 Checksum for header block 156 1 Link indicator (file type) 157 100 Name of linked file
Existe-t-il une convention pour coder les noms de fichiers non-ASCII? Cet article mentionne le problème, mais ne mentionne pas une solution.
La classe Tarfile accepte un objet FileObj. Je suppose que vous pouvez transmettre n'importe quelle entité de téléchargement partielle que vous obtenez de votre webcadre Web. Ajout à PaxDiablo Post: Tar est un format de fichier très difficile et complexe, malgré sa simplicité apparente. Vous pouvez vérifier la contrainte de base, mais si vous devez prendre en charge tous les dialectes de gare existants possibles, vous allez perdre beaucoup de temps. La majeure partie de sa complexité provient des problèmes suivants: p> En outre, le format n'a pas d'en-tête initial, donc le seul moyen de vérifier si l'unique archive est sain d'esprit consiste à numériser complètement le fichier, à attraper chaque enregistrement et à valider chacun. p> p>
Ah, tu m'as battu à une demi-minute :-)
Pas vraiment, votre méthode est une autre voie (probablement mieux) d'obtenir la même chose.
Le Ouvrir code> méthode de
Tarfile code> prend un objet ressemblant à un fichier dans son
FileObj code> argument. Cela peut être un
stringio code> instance p>
Dites que vos données téléchargées sont contenues dans la chaîne DATA CODE>.
from tarfile import TarFile, TarError
from StringIO import StringIO
sio = StringIO(data)
try:
tf = TarFile(fileobj=sio)
# process the file....
except TarError:
print "Not a tar file"
Cela pose la question suivante: Le module Tarfile de Python prend-il en charge les différents formats de goudron dont vous parlez avec IS_TARFILE () lors de la vérification des fichiers directement?
@Shule Pour répondre à cette question, vous pouvez consulter le code source du module pour is_tarfile () code>
.