我想在使用Python作为文件类对象之前验证tar存档中是否存在给定文件。我用isreg()
尝试过,但可能我做错了。
如何使用Python检查tar档案中是否存在文件?
我试过
import tarfile
tar = tarfile.open("sample.tar", "w")
tar.add("test1.txt")
tar.add("test2.txt")
tar.add("test3.py")
tar.close()
tar = tarfile.open("sample.tar", "r")
tai = tar.tarinfo(name="test3.py")
print(tai.isreg())
print(tai.size())
tar.close()
可能 tai 错了。实际上tai.size()
始终为0。
答案 0 :(得分:3)
如果您确实需要检查,则可以使用getnames
方法和in
运算符测试会员资格:
>>> import tarfile
>>> tar = tarfile.open("sample.tar", "w")
>>> "sample.tar" in tar.getnames()
True
但是,我认为在Python(以及一般的文件系统处理)中,首选捕获异常。最好尝试读取并捕获异常,因为在检查文件存在和稍后读取文件之间总是会发生事情。
>>> try:
... tar.getmember('contents.txt')
... except KeyError:
... pass
...
答案 1 :(得分:0)
也许使用getnames()
?
tar = tarfile.open('sample.tar','r')
if 'test3.py' in tar.getnames():
print 'test3.py is in sample.tar'
答案 2 :(得分:0)
您可以使用tar.getnames()
和in
运算符来执行此操作:
$ touch a.txt
$ tar cvf a.tar a.txt
$ python
>>> names = tarfile.open('a.tar').getnames()
>>> 'a.txt' in names
True
>>> 'b.txt' in names
False
答案 3 :(得分:0)
即使tar文件在子目录中具有文件名,并且使用normcase来模拟当前操作系统的文件名处理(例如在Windows上,搜索“readme.txt”应该匹配“README.TXT”) tar文件)。
def filename_in_tar(filename, atarfile):
filename= os.path.normcase(filename)
return any(
filename == os.path.normcase(os.path.basename(tfn))
for tfn in atarfile.getnames())