gpt4 book ai didi

python - is_tarfile() 为空白文件返回 True

转载 作者:太空狗 更新时间:2023-10-29 21:51:09 24 4
gpt4 key购买 nike

编辑 1

嗯,我接受 tar 尊重空文件的答案......但在我的系统上:

$ touch emptytar
$ tar -tf emptytar
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

也许我有一个非规范版本?

$ tar --version
tar (GNU tar) 1.22
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

大家好,

我正在测试一些逻辑来处理用户上传 TAR 文件。当我向 tarfile.is_tarfile() 提供一个空白文件时,它返回 True,这不是我所期望的:

$ touch tartest
$ cat tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
True

如果我向文件中添加一些文本,它会返回 False,这是我所期望的:

$ echo "not a tar" > tartest
$ python -c "import tarfile; print tarfile.is_tarfile('tartest')"
False

我可以在开头添加检查以检查零长度文件,但基于 documentation对于 tarfile.is_tarfile(name) 我认为这是不必要的:

Return True if name is a tar archive file, that the tarfile module can read.

我什至检查了来源,tarfile.py ,我可以看到它正在检查 header block ,但我不完全理解它是如何评估这些 block 的。

我是否误读了文档并因此设定了不公平的期望?

谢谢你,
扎卡里

最佳答案

一个空的 tar 文件一个完全有效的空 tar 文件。考虑一下,在任何 Unix shell 提示符下:

$ touch foo.tar
$ ls -l foo.tar
-rw-r--r-- 1 aleax staff 0 Jun 16 18:49 foo.tar
$ tar tvf foo.tar
$ tar xvf foo.tar

看到了吗?空的 foo.tar 是 Unix tar 命令的完全有效的 tar 文件——它没有任何可显示或解压缩的内容。如果 Python 的 tar 处理与 tar 本身的处理有如此大的不同,那将是真正的问题!文档中的哪句话让您相信这种有问题的、令人头疼的不兼容性是规范的一部分?

关于python - is_tarfile() 为空白文件返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com