Python: extraheren met tarfile, maar mappen negeren

Als ik een .tar-bestand met een bestand '/ path/to/file.txt' heb, is er een manier (in Python) om het bestand naar een opgegeven map te extraheren zonder de map '/ pad/naar' ?

10

4 antwoord

Ik ontmoet ook dit probleem en geef een lijst van het volledige voorbeeld op basis van het antwoord van ekhumoro

import os, tarfile
output_dir = "."
tar = tarfile.open(tar_file)
for member in tar.getmembers():
  if member.isreg():  # skip if the TarInfo is not files
    member.name = os.path.basename(member.name) # remove the path by reset it
    tar.extract(member,output_dir) # extract 
11
toegevoegd

De gegevensattributen van een TarInfo -object zijn beschrijfbaar. Dus verander gewoon de naam naar wat je maar wilt en pak het dan uit:

import sys, os, tarfile

args = sys.argv[1:]
tar = tarfile.open(args[0])
member = tar.getmember(args[1])
member.name = os.path.basename(member.name)
path = args[2] if len(args) > 2 else ''
tar.extract(member, path)
8
toegevoegd
+1 voor de herinnering over os.path.basename()
toegevoegd de auteur metasequoia, de bron

Vanaf de tarfile-module kunt u dat eenvoudig doen. Ik heb het nog niet gecontroleerd.

TarFile.extract(member, path="")

Documentatie:

Pak een lid uit het archief uit naar de huidige werkmap en gebruik de volledige naam. De bestandsinformatie wordt zo nauwkeurig mogelijk geëxtraheerd. lid kan een bestandsnaam of een TarInfo-object zijn. U kunt een andere map opgeven met behulp van het pad.

Dus je zou moeten kunnen doen

TarFile.extract(member, path=".")

See the full documentation at : http://docs.python.org/library/tarfile.html

2
toegevoegd
Wanneer de documenten 'naar de huidige werkmap zeggen, waarbij de volledige naam wordt gebruikt', is de 'volledige naam' eigenlijk een pad. Ze kunnen nauwkeuriger zeggen "het volledige pad gebruiken, te beginnen met de huidige werkdirectory ... U kunt een andere startmap opgeven met behulp van het pad." Dus dit antwoord zal niet werken. Het antwoord van ekhumoro lijkt beter.
toegevoegd de auteur Weeble, de bron

U kunt TarFile.extractbestand (lid) gebruiken om een ​​specifieke het dossier.

Het retourneert een fileleachtig object (typische Python) dat u vervolgens kunt gebruiken om de inhoud naar een bestand te schrijven op elke gewenste locatie.

0
toegevoegd
Dat zou werken, maar het bewaart de metadata van het bestand niet (modificatietijd etc.).
toegevoegd de auteur Adam Rosenfield, de bron