python tarfile 无需完整路径
我写了一个小脚本,下面是代码,它可以读取一组文件并把它们打包成一个压缩文件。现在一切都运行得很好,唯一的问题是,当我解压这个压缩文件时,里面的文件路径是完整的,包括文件所在的文件夹结构。我想知道有没有办法在打包时不保留这些文件夹的结构呢?
compressor = tarfile.open(PATH_TO_ARCHIVE + re.sub('[\s.:"-]+', '',
str(datetime.datetime.now())) + '.tar.gz', 'w:gz')
for file in os.listdir(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
compressor.add(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT) + file)
compressor.close()
2 个回答
2
我写了一个上下文管理器,用来改变当前的工作目录,这样可以方便地处理tar文件。
import contextlib
@contextlib.contextmanager
def cd_change(tmp_location):
cd = os.getcwd()
os.chdir(tmp_location)
try:
yield
finally:
os.chdir(cd)
然后,针对你的情况,把所有东西打包起来:
with cd_change(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
for file in os.listdir('.'):
compressor.add(file)
8
看看这个 TarFile.add
的用法说明:
... 如果提供了
arcname
,那么它就会指定一个在压缩文件中使用的替代文件名。