Python:如何查找具有特定扩展名的所有文件?

Bee*_*and 20 python

我试图.c使用Python 查找目录中的所有文件.

我写了这个,但它只是将所有文件归还给我 - 而不仅仅是.c文件.

import os
import re

results = []

for folder in gamefolders:
    for f in os.listdir(folder):
        if re.search('.c', f):
            results += [f]

print results
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得.c文件?

dei*_*eif 34

尝试将内循环更改为这样的东西

results += [each for each in os.listdir(folder) if each.endswith('.c')]
Run Code Online (Sandbox Code Playgroud)


Mac*_*arz 26

试试"glob":

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
Run Code Online (Sandbox Code Playgroud)

  • +1:这正是glob的设计目标.使用正则表达式是一种巨大的矫枉过正. (5认同)

fir*_*iku 6

有一个更好的解决方案,直接使用正则表达式,它是标准库fnmatch处理文件名模式的模块。(另请参阅glob模块。)

编写一个辅助函数:

import fnmatch
import os

def listdir(dirname, pattern="*"):
    return fnmatch.filter(os.listdir(dirname), pattern)
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用它:

result = listdir("./sources", "*.c")
Run Code Online (Sandbox Code Playgroud)


fre*_*ley 5

for _,_,filenames in os.walk(folder):
    for file in filenames:
        fileExt=os.path.splitext(file)[-1]
        if fileExt == '.c':
            results.append(file)
Run Code Online (Sandbox Code Playgroud)


Jiv*_*son 5

# KISS

import os

results = []

for folder in gamefolders:
    for f in os.listdir(folder):
        if f.endswith('.c'):
            results.append(f)

print results
Run Code Online (Sandbox Code Playgroud)