在运行执行文件和导入文件的时候会产生全局名称空间,名称空间中名字的查找顺序为:
1. 先从内存中查找
2. 再从内置模块中查找
3. 最后去环境变量sys.path中查找
写一个py文件main,打印环境变量
import sys
print(sys.path)
其结果为
['D:\\Python27\\day20', 'D:\\Python27\\day20', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 'D:\\Python38\\python38.zip', 'D:\\Python38\\DLLs', 'D:\\Python38\\lib', 'D:\\Python38', 'C:\\Users\\oldboy\\AppData\\Roaming\\Python\\Python38\\site-packages', 'D:\\Python38\\lib\\site-packages', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
上面的列表中第一个元素永远是当前文件所在的路径
模块找不到的情况:
1. 把模块所在的路径添加到sys.path中
import sys
sys.path.append(r'D:\Python27\day20\aaa\bbb')
2. 使用from...import句式
from aaa.bbb.ccc import m1
from aaa.bbb.ccc.m1 import f1
f1()
m1.f1()
绝对导入:始终是以执行文件所在的sys.path路径为基准查找
相对导入:.(句点符)代表的是当前路径,可以打破始终以执行文件及准的查找顺序。
创建一个文件夹m,在文件夹内部创建导入文件m1
import m2
print('这是导入文件m1')
在文件夹内部创建导入文件m2:
print('这是导入文件m2')
在根目录下写一个py文件main,并运行:
from m import m1
print('这是执行文件')
其结果会报错:
Traceback (most recent call last):
File "D:\python\code\py27_day20\main.py", line 1, in
from m import m1
File "D:\python\code\py27_day20\m\m1.py", line 1, in
import m2
ModuleNotFoundError: No module named 'm2'
错误原因为:在导入模块的时候,模块的查找始终以执行文件所在的路径为准。
可以对导入文件m1进行修改,分别用绝对导入和相对导入的方式解决。
绝对导入的解决方式:
from m import m1
print('这是导入文件m1')
相对导入的解决方式:
from . import m2
print('这是导入文件m1')
运行执行文件后,以上两者其结果皆为:
这是导入文件m2
这是导入文件m1
这是执行文件
包:
就是文件夹,其实就是文件夹中包含了一些列的py文件(模块),包中有一个特殊文件:__init__.py文件
软件开发目录:
bin:放启动文件的,如果启动文件只有一个,也可以不要bin文件夹,直接把启动文件写在项目的根目录下
conf (config:配置):放项目的配置文件,初始化一些数据
core:放一些项目的核心逻辑
lib:放一些项目使用的公共代码
log:日志,就是记录一些在代码运行过程中发生的一些事情,可以是正确的,可以是异常的
db:存储跟项目相关的数据
api:接口层
setup.py:安装模块使用的
README:项目的说明书
正则表达式就是利用一些特殊的符号匹配出我们想要的数据。
[0123456789]即0-9之间的数字
[0-9]即0-9之间的数字
[A-Z]即A-Z之间的字母
[a-z]即a-z之间的字母