使用带有os.path.isfile()的通配符

时间:2010-11-28 09:15:29

标签: python path wildcard

我想检查目录中是否有.rar文件。它不需要递归。

使用带有os.path.isfile()的通配符是我最好的猜测,但它不起作用。那我该怎么办?

感谢。

8 个答案:

答案 0 :(得分:63)

glob就是您所需要的。

>>> import glob
>>> glob.glob('*.rar')   # all rar files within the directory, in this case the current working one
如果路径是现有常规文件,则

os.path.isfile()返回True。因此,它用于检查文件是否已存在且不支持通配符。 glob确实如此。

答案 1 :(得分:7)

如果不使用os.path.isfile(),您将不知道glob()返回的结果是文件还是子目录,所以请尝试使用以下内容:

import fnmatch
import os

def find_files(base, pattern):
    '''Return list of files matching pattern in base folder.'''
    return [n for n in fnmatch.filter(os.listdir(base), pattern) if
        os.path.isfile(os.path.join(base, n))]

rar_files = find_files('somedir', '*.rar')

如果您愿意,您也可以过滤glob()返回的结果,这样做的好处是可以做一些与unicode等相关的额外事情。如果重要,请检查glob.py中的源。

[n for n in glob(pattern) if os.path.isfile(n)]

答案 2 :(得分:3)

通配符扩展了通配符,因此您无法将其与os.path.isfile()

一起使用

如果您想使用通配符,可以使用popen with shell = Trueos.system()

>>> import os
>>> os.system('ls')
aliases.sh          
default_bashprofile     networkhelpers          projecthelper.old           pythonhelpers           virtualenvwrapper_bashrc
0
>>> os.system('ls *.old')
projecthelper.old
0

你也可以使用glob模块获得相同的效果。

>>> import glob
>>> glob.glob('*.old')
['projecthelper.old']
>>> 

答案 3 :(得分:3)

import os
[x for x in os.listdir("your_directory") if len(x) >= 4 and  x[-4:] == ".rar"]

答案 4 :(得分:0)

iglob比glob更好,因为你实际上并不想要rar文件的完整列表,只是想检查一个rar是否存在

答案 5 :(得分:0)

如果您只关心是否存在至少一个文件而您不想要文件列表:

import glob
import os

def check_for_files(filepath):
    for filepath_object in glob.glob(filepath):
        if os.path.isfile(filepath_object):
            return True

    return False

答案 6 :(得分:0)

显示完整路径和基于扩展名的过滤器,

import os
onlyfiles = [f for f in os.listdir(file) if len(f) >= 5 and  f[-5:] == ".json" and isfile(join(file, f))]

答案 7 :(得分:0)

另一种使用子流程完成工作的方法。

import subprocess

try:
        q = subprocess.check_output('ls')
        if ".rar" in q:
             print "Rar exists"
except subprocess.CalledProcessError as e:
        print e.output

参考:https://docs.python.org/2/library/subprocess.html#subprocess.check_output