在Python中检查GZIP文件是否存在

1 投票
3 回答
1397 浏览
提问于 2025-04-18 02:24

我想在我的Linux电脑上用Python检查一个.gz文件是否存在。如果我检查一个文本文件,下面的代码可以正常工作:

import os.path
os.path.isfile('bob.asc')

但是,如果bob.asc是gzip格式的(也就是bob.asc.gz),Python就无法识别它。理想情况下,我希望能用os.path.isfile或者其他简单的方法来检查(不想写新的函数)。有没有办法让Python能识别这个文件,或者通过修改我的系统设置来实现?

不幸的是,我不能改变数据格式或文件名,因为这些文件是公司批量提供给我的。

3 个回答

0

你需要对每个文件进行测试。比如说:

if any(map(os.path.isfile, ['bob.asc', 'bob.asc.gz'])):
    print 'yay'
1

当然不行;它们是完全不同的文件。你需要单独测试它:

os.path.isfile('bob.asc.gz')

如果那个确切的文件在当前工作目录中存在,这个会返回 True

不过可以有一个变通的方法:

from os import listdir, getcwd
from os.path import splitext, basename

any(splitext(basename(f))[0] == 'bob.asc' for f in listdir(getcwd()))
1

经过一番折腾,我找到的最简洁的方法是

subprocess.call(['ls','bob.asc.gz']) == 0

这个方法会返回True,如果文件在目录中存在。这是我对

os.path.isfile('bob.asc.gz')

的预期行为,但不知为什么,Python在用os.path.isfile检查文件时,不会把扩展名为.gz的文件当作文件来处理。

我觉得我的解决方案不是特别优雅,但确实很简洁。如果有人有更优雅的解决方案,我很想看看。谢谢。

撰写回答