编辑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
也许我有一个非规范的版本?在
^{pr2}$大家好
我正在测试一些逻辑来处理用户上传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
我可以在开头添加一个检查,以检查长度为零的文件,但基于documentationfor tarfile.is_tarfile(name)
我认为这是不必要的:
Return True if name is a tar archive file, that the tarfile module can read.
我甚至检查了源代码tarfile.py,我可以看到它正在检查头段块,但我不完全理解它是如何计算这些块的。在
我是否误读了文件并因此设定了不公平的期望?在
谢谢,
扎卡里
在命令行中尝试以下操作:
没有错误。在
看起来一个空文件只是一个有效的(但无用的)TAR文件。在
事实上,在Python2.6和2.7之间,“istutarfile”的行为似乎已经发生了变化。在Python2.7中,
is_tarfile
为空文件返回False
。在空tar文件是一个完全有效的空tar文件。在任何Unix shell提示符下,请考虑:
看到了吗?空的
foo.tar
是Unixtar
命令的一个完全有效的tar文件——它没有任何内容可以显示或解压缩。如果Python的tar处理与tar
本身的tar处理有如此大的不同,那将是一个真正的问题!文档中的哪一句话让您相信这样一个有问题、令人头痛的不兼容是规范的一部分?在相关问题 更多 >
编程相关推荐