is\u tarfile()对于空白fi返回True

2024-10-02 06:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑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,我可以看到它正在检查头段块,但我不完全理解它是如何计算这些块的。在

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

谢谢,
扎卡里


Tags: 文件nameimportfalsetrue编辑isnot
3条回答

在命令行中尝试以下操作:

$ touch emptyfile
$ tar -tvf emptyfile

没有错误。在

看起来一个空文件只是一个有效的(但无用的)TAR文件。在

事实上,在Python2.6和2.7之间,“istutarfile”的行为似乎已经发生了变化。在Python2.7中,is_tarfile为空文件返回False。在

$ touch /tmp/foo.tar
$ python
Python 2.7.3 (default, Jul 24 2012, 11:41:40) 
[GCC 4.6.3 20120306 (Red Hat 4.6.3-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tarfile
>>> print tarfile.is_tarfile("/tmp/foo.tar")
False
>>> 
$ 

空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本身的tar处理有如此大的不同,那将是一个真正的问题!文档中的哪一句话让您相信这样一个有问题、令人头痛的不兼容是规范的一部分?在

相关问题 更多 >

    热门问题