我做了一个如下的小脚本来读取文件组并对它们进行tar,它的工作正常,接受压缩文件包含未压缩文件的完整路径。有没有办法在没有目录结构的情况下做到这一点?
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()
答案 0 :(得分:7)
查看TarFile.add
签名:
...如果给定,
arcname
指定存档中文件的备用名称。
答案 1 :(得分: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)