使用python tarfile add,而不将normpath应用于arcname

使用python tarfile add,而不将normpath应用于arcname,python,tar,Python,Tar,我正在使用python的tarfile库创建一个gzip tar文件 由于我无法控制的原因,tar文件需要有绝对路径名。(我知道这不是正常做法。) 当我打电话时 tarobject.add("/foo/xx1", "/bar/xx1") arcname参数“/bar/xx1”通过os.path.normpath()运行并转换为“bar/xx1” 如何避免这种情况,并按照我的要求以“/bar/xx1”结束 我已经读到我可以在某个地方替换normpath,但是我对Python还是相当陌生的,我不知

我正在使用python的tarfile库创建一个gzip tar文件

由于我无法控制的原因,tar文件需要有绝对路径名。(我知道这不是正常做法。)

当我打电话时

tarobject.add("/foo/xx1", "/bar/xx1")
arcname参数“/bar/xx1”通过os.path.normpath()运行并转换为“bar/xx1”

如何避免这种情况,并按照我的要求以“/bar/xx1”结束

我已经读到我可以在某个地方替换normpath,但是我对Python还是相当陌生的,我不知道如何做到这一点,或者更广泛的含义是什么

编辑

查看后,我仔细查看了tarinfo对象,这似乎有效:

my_tarinfo = tarobject.gettarinfo("/foo/xx1")
my_tarinfo.name = "/bar/xx1"
tarobject.addfile(my_tarinfo, file("/foo/xx1"))    

你真的做了奇怪的事。您需要将
/usr/lib64/python/tarfile.py
复制到PYTHONPATH中的目录中。然后您可以修改此文件。但您需要将自己的tarfile模块与代码捆绑在一起

你真的做了奇怪的事。您需要将
/usr/lib64/python/tarfile.py
复制到PYTHONPATH中的目录中。然后您可以修改此文件。但您需要将自己的tarfile模块与代码捆绑在一起

虽然实际添加文件时删除了第一个斜杠,但删除它的不是os.path.normpath。您的问题出在其他地方。@deStrangis:查看tarfile.py,它在gettarinfo中。我会看看是否能找到一个解决方法来处理这个创建的对象。虽然文件实际上是在删除第一个斜杠的情况下添加的,但删除它的不是os.path.normpath。您的问题出在其他地方。@deStrangis:查看tarfile.py,它在gettarinfo中。我会看看我是否能找到一个解决办法来处理这个创建的对象。我希望我能按照tarfile.normpath=lambda path:path的思路做一些猴子补丁,但这似乎不起作用。我希望我能按照tarfile.normpath=lambda path:path的思路做一些猴子补丁,但这似乎不起作用。