如何在使用os.listdir时去除.py扩展名
在我的代码中,我想对一个文件夹里的所有文件执行导入操作。我在工作区有一个文件叫做 abc.py
。目前我正在这样做:
for filename in os.listdir(homedir/workspace)
exec "import " + filename
filename = eval(filename + '.function(variable)')
问题是,它不是导入 abc
,而是导入 abc.py
,然后就出现了错误 no module named py
。
我该怎么解决这个问题呢?
提前谢谢大家!
3 个回答
1
要在一个文件夹里的所有Python文件中运行 .function(variable)
,可以这样做:
import os
import sys
from importlib import import_module
dirpath = 'homedir/workspace'
sys.path.append(dirpath)
for filename in os.listdir(path)
module_name, ext = os.path.splitext(filename)
if ext == '.py':
try:
result = import_module(module_name).function(variable)
except Exception as e:
sys.stderr.write('error: %s: %s\n' % (filename, e))
continue
else:
print('%s: %s' % (filename, result))
另外,你可以查看 在Python中构建一个简单的插件架构。
8
你可以使用 os.path.splitext 这个功能。
os.path.splitext(filename)[0]
这个功能会返回一个包含两个部分的数组,第一个部分是文件名,第二个部分是文件的扩展名。为了更保险一点,你可以再确认一下你确实获取的是一个 .py
文件:
if os.path.splitext(filename)[1] == '.py':
# do stuff