如何在使用os.listdir时去除.py扩展名

4 投票
3 回答
7477 浏览
提问于 2025-04-18 05:59

在我的代码中,我想对一个文件夹里的所有文件执行导入操作。我在工作区有一个文件叫做 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 个回答

0

你可以使用 glob 这个工具:

import glob
import os
os.chdir("/mydir")
for file in glob.glob("*.py"):
    # do something with file

在使用 exec 之前,先看看这个,确保你真的想用它。

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

撰写回答