我希望在不迭代脚本的情况下迭代当前工作目录中的所有文件的脚本(因此任何扩展.py
)。我以前用过这个
for fileName in os.listdir('.'):
if fileName != 'autocorrelation1.py':
with open(fileName, "r") as input:
REST OF SCRIPT HERE
当我在文件夹中只有一个脚本 autocorrelation.py 时,这有效,但现在我有几个 python 脚本,我想知道是否有 bash 风格的等效物*
for fileName in os.listdir('.'):
if fileName != *'.py':
with open(fileName, "r") as input:
REST OF SCRIPT HERE
我想我很懒惰,可以用另一行代码来完成,但只是想知道是否有人知道更有趣的方式!
我建议使用 fnmatch 模块:
for fileName in os.listdir('.'):
if not fnmatch.fnmatch(fileName, '*.py'):
print fileName
glob 模块可以帮助您找到匹配的文件,如果这是您想要的:
for fileName in glob.glob('*.py'):
print fileName
在这种特殊情况下,最简单的解决方案是
if not file_name.endswith(".py"):
另一种选择是
if not fnmatch.fnmatch(file_name, "*.py"):
除了 glob 模块,我建议看看这些生成器。具体来说,这个:
# genfind.py
#
# A function that generates files that match a given filename pattern
import os
import fnmatch
def gen_find(filepat,top):
for path, dirlist, filelist in os.walk(top):
for name in fnmatch.filter(filelist,filepat):
yield os.path.join(path,name)
# Example use
if __name__ == '__main__':
lognames = gen_find("access-log*","www")
for name in lognames:
print name
使用带有通配符的 glob 检查一组(或子集)文件,并使用 endswith() 过滤.py
文件。
例如,
import glob
for fn in glob.glob('*'): # specify set of files to check
if not fn.endswith('.py'):
print(fn)
根据更新/澄清的问题更新代码。
本周的 Python 模块有更多使用 glob 的示例
使用re
模块,你可以在这里找到它
re.search('^.*py$',str(yourFileName))
这是输出:
>>> import re
>>>
>>> a = re.search('^.*py$','prova')
>>> a
>>> a = re.search('^.*py$','prova.py')
>>> a
<_sre.SRE_Match object at 0x2b09559c1760>