在所有子目录中运行多个python文件
我有一个包含多个子目录的目录。您将如何编写脚本,将cd放入每个子目录并运行scraper,cd out,然后继续下一个,如果可能的话,最好的方法是什么 目录外观的示例:在所有子目录中运行多个python文件,python,web-scraping,Python,Web Scraping,我有一个包含多个子目录的目录。您将如何编写脚本,将cd放入每个子目录并运行scraper,cd out,然后继续下一个,如果可能的话,最好的方法是什么 目录外观的示例: - All_Scrapers (parent dir) - Scraper_one (sub dir folder) - scraper.py - Scraper_two (sub dir folder) - scraper.py - Scraper_three (sub dir f
- All_Scrapers (parent dir)
- Scraper_one (sub dir folder)
- scraper.py
- Scraper_two (sub dir folder)
- scraper.py
- Scraper_three (sub dir folder)
- scraper.py
- all.py
所有刮刀都有主要功能
if __name__ == "__main__":
main()
您可能希望检查遍历目录树的函数,并在每个目录中运行脚本(或可以将脚本内容包装到其中的main
函数)
一个示例代码是:
import os
for root, dirs, files in os.walk(".", topdown=False):
scraper_main()
您可能希望检查遍历目录树的函数,并在每个目录中运行脚本(或可以将脚本内容包装到其中的main
函数)
一个示例代码是:
import os
for root, dirs, files in os.walk(".", topdown=False):
scraper_main()
一种方法是遍历目录,并通过编程导入所需的模块 假设
Scraper X文件夹
s位于相同的子目录scrapers
,并且在包含scrapers
的目录中有batch_run.py
脚本(因此,在相同的路径级别),下面的脚本将执行此操作:
import os
import importlib
base_subdir = 'scrapers'
for root, subdirs, filenames in os.walk(base_subdir):
for subdir in subdirs:
if not subdir.startswith('__'):
print(root, subdir)
submodule = importlib.import_module('.'.join((root, subdir, 'scraper')))
submodule.main()
编辑 如果脚本位于
base_subdir
路径内,则可以通过稍微更改调用import_module()
的方式来调整代码
import os
import importlib
base_subdir = '.'
for root, subdirs, filenames in os.walk(base_subdir):
for subdir in subdirs:
if not subdir.startswith('__'):
print(root, subdir)
script = importlib.import_module('.'.join((subdir, 'scraper')), root)
script.main()
编辑2 一些解释: 如何使用导入模块()? 这条线实际上是在做这项工作。粗略地说,当它仅用于一个参数时,即
alias = importlib.import_module("my_module.my_submodule")
这相当于:
import my_module.my_submodule as alias
from my_module import my_submodule as alias
相反,当与两个参数一起使用时,即
alias = importlib.import_module("my_submodule", "my_module")
这相当于:
import my_module.my_submodule as alias
from my_module import my_submodule as alias
第二种形式对于相对导入非常方便(即使用
或。
特殊目录进行导入)
如果不是子目录startswith(“\uuu”):在做什么?
导入模块时,Python将生成一些要解释的字节码,并将结果作为
.pyc
文件缓存在\uuuuuuuu缓存
目录下。前面提到的行将避免在遍历目录时,\uuuuuu cache\uuuuuu
(实际上,任何以\uuuuuuu
开头的目录)将被处理为包含要导入的模块。其他类型的过滤也可能同样有效。一种方法是遍历目录并以编程方式导入所需的模块
假设Scraper X文件夹
s位于相同的子目录scrapers
,并且在包含scrapers
的目录中有batch_run.py
脚本(因此,在相同的路径级别),下面的脚本将执行此操作:
import os
import importlib
base_subdir = 'scrapers'
for root, subdirs, filenames in os.walk(base_subdir):
for subdir in subdirs:
if not subdir.startswith('__'):
print(root, subdir)
submodule = importlib.import_module('.'.join((root, subdir, 'scraper')))
submodule.main()
编辑 如果脚本位于
base_subdir
路径内,则可以通过稍微更改调用import_module()
的方式来调整代码
import os
import importlib
base_subdir = '.'
for root, subdirs, filenames in os.walk(base_subdir):
for subdir in subdirs:
if not subdir.startswith('__'):
print(root, subdir)
script = importlib.import_module('.'.join((subdir, 'scraper')), root)
script.main()
编辑2 一些解释: 如何使用导入模块()? 这条线实际上是在做这项工作。粗略地说,当它仅用于一个参数时,即
alias = importlib.import_module("my_module.my_submodule")
这相当于:
import my_module.my_submodule as alias
from my_module import my_submodule as alias
相反,当与两个参数一起使用时,即
alias = importlib.import_module("my_submodule", "my_module")
这相当于:
import my_module.my_submodule as alias
from my_module import my_submodule as alias
第二种形式对于相对导入非常方便(即使用
或。
特殊目录进行导入)
如果不是子目录startswith(“\uuu”):在做什么?
导入模块时,Python将生成一些要解释的字节码,并将结果作为
.pyc
文件缓存在\uuuuuuuu缓存
目录下。前面提到的行将避免在遍历目录时,\uuuuuu cache\uuuuuu
(实际上,任何以\uuuuuuu
开头的目录)将被处理为包含要导入的模块。其他类型的筛选也可能同样有效。查看此QA以获得一些帮助:查看此QA以获得一些帮助:因此,我在复制代码并得到此错误的scraper的同一目录中有一个文件'all.py'。TypeError:'package'参数是为“…breckland_scraper.scraper”执行相对导入所必需的。必须在父目录中,或者您必须相应地修改代码。非常感谢,但是我可以得到关于这行代码的解释吗script=importlib.import_module('.'..join((subdir,'scraper')),root)
如果不是subdir.startswith('.'':因此,我在与scraper相同的目录中有一个文件'all.py',我复制了代码并得到了这个错误TypeError:'package'参数是为“…breckland_scraper.scraper”执行相对导入所必需的。
它必须在父目录中,或者您必须相应地修改代码。非常感谢,但是,我可以得到这行代码的解释吗?script=importlib.import_module('...join((subdir,'scraper')),root)
如果不是subdir.startswith('.''.'):