簡體   English   中英

我可以一次從一個文件夾中導入所有 Python 文件嗎?

[英]Can I import all Python files from a folder at once?

我想知道是否可以從文件夾中導入所有 Python 文件,還是需要單獨導入每個文件? 我建立了一個項目,其中有一個文件夾“website_functions”,其中包含 20 個 Python 文件。 其中每個包含一個function(我使用Selenium訪問不同的網站,每個文件對應一個網站)。 不必單獨導入它們會使其更快。

提前感謝您的回答

我會說這是一個非常糟糕的主意,它違反了 pep8 樣式指南

但如果你真的必須這樣做,你可以像這樣破解它:

import importlib
from glob import glob

# Get list of *.py files
modules = glob('*.py')
# Get rid of *.py extension
modules = [module[:-3] for module in modules]

for module in modules:
    importlib.import_module(module)

是的,這是可能的。 在包含您要導入的文件的文件夾中,在__init__.py文件中名為__all__的列表中指定所有文件名。 從您希望將文件導入到的程序中,您現在可以使用from directory import *導入它們。

考慮以下示例。

項目目錄結構:

.
|-- main.py
`-- modules
    |-- __init__.py
    |-- f.py
    `-- g.py

1 directory, 4 files

主文件

from modules import *

f.f1()
f.f2()
g.g1()
g.g2()

模塊/f.py

def f1():

    print("This is f1() from modules/f.py.")

def f2():

    print("This is f2() from modules/f.py.")

模塊/g.py

def g1():

    print("This is g1() from modules/g.py.")

def g2():

    print("This is g2() from modules/g.py.")

模塊/__init__.py

__all__ = ["f", "g"]

main.py的output如下。

This is f1() from modules/f.py.
This is f2() from modules/f.py.
This is g1() from modules/g.py.
This is g2() from modules/g.py.

如果您希望每次運行程序時自動生成__init__.py中的__all__列表,您可以使用os庫來實現。 例如:

(我已經從這個例子中刪除了 f.py 以免干擾modulesf屬性。)

模塊/__init__.py

import os

__all__ = []
dirname = os.path.dirname(os.path.abspath(__file__))

for f in os.listdir(dirname):
    if f != "__init__.py" and os.path.isfile("%s/%s" % (dirname, f)) and f[-3:] == ".py":
        __all__.append(f[:-3])

主文件

from modules import *

g.g1()
g.g2()

main.py的output如下。

This is g1() from modules/g.py.
This is g2() from modules/g.py.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM