【发布时间】:2010-09-21 18:02:07
【问题描述】:
我有一个文件test.txt,它位于压缩档案test.zip 中。 test.txt 的权限在压缩时不受我的控制,但现在我希望它们是组可写的。我正在使用 Python 提取文件,并且不想逃到 shell 中。
编辑: 到目前为止,这是我所得到的:
import zipfile
z = zipfile.ZipFile('test.zip', 'w')
zi = zipfile.ZipInfo('test.txt')
zi.external_attr = 0777 << 16L
z.writestr(zi, 'FOO')
z.close()
z = zipfile.ZipFile('test.zip', 'r')
for name in z.namelist():
newFile = open(name, "wb")
newFile.write(z.read(name))
newFile.close()
z.close()
这在使用 2.5.1 的 OS X 上完美运行,但它不适用于我的 home box(Debian、Python 2.4 和 2.5)或使用 Python 2.4 的 RHEL 5。除了 OS X 之外,它不会出错,但也不会更改权限。任何想法为什么?另外,writestr() 是如何工作的?我知道我在这里用错了。
没有os.chmod 有没有办法做到这一点(提取文件的用户在提取文件后没有使用os.chmod 的权限)?我对 zip 文件具有完全写入权限。
更多信息:
> ls -l test.zip
-rwxrwxrwx 1 myuser mygroup 2008-11-11 13:24 test.zip
> unzip test.zip
Archive: test.zip
inflating: test.txt
> ls -l test.txt
-rw-r--r-- 1 myuser mygroup 2008-11-11 13:34 test.txt
提取的用户不是myuser,而是mygroup。
【问题讨论】:
-
您可以做的另一件事是详细说明您在 linux 下遇到的问题,因为这里有人可能会提供帮助,但您没有提供任何帮助。
-
不确定你的意思。 Linux 表现良好,尽管 python 在 OS X 上表现不同。
-
嗯,你说“它适用于 OS X,而不是 Debian”。如果您说为什么它不起作用,也许发布了一些代码或错误消息,有人可能会提供帮助。只是一个想法。
-
啊,我明白你的意思了。今天大脑工作不正常。
-
用户可以解压,但不能
os.chmod?听起来很奇怪。