绝对导入与相对导入
# 在程序中涉及到多个文件之间导入模块的情况下一律按照执行文件所在的路径为准
绝代导入
始终按照执行文件所在的sys.path查找模块
相对导入
句点符(.)
.表示当前文件路径
..表示上一层文件路径
能够打破始终以执行文件为准的规矩,只考虑两个文件之间的位置
# 相对导入只能用在你快文件中,不能在执行文件中使用
软件开发目录规范
目录规范并没有固定的要求,是要符合清晰可读即可
bin 文件夹
存放一系列启动文件(当启动文件少或者只有一个的时候可以直接写在根目录下)
start.py
conf 文件夹
存放一系列配置文件
settings.py(一般该文件加内的变量名为大写。表示常量)
lib 文件夹
存放公共的功能
common.py
db文件夹
存放相关的文件
userinfo.txt
log 文件夹
存放日志记录文件
log.txt
core 文件夹
存放项目核心代码文件
src.py
readme 文件
存放说明相关信息(类似说明书,可以打广告)
requirements.txt
存放项目所需的第三方模块及版本号
正则表达式
正则表达式是一门独特的语言,跟其他编程语言没有关系!!!
如果想在Python中使用正则,需要借助内置模块're'
什么是正则表达式?
利用一些特殊的符号组合去字符串中筛选符合条件的数据
python模拟正则
# 模拟正则
# 1.十一位数
# 2.纯数字
# 3.13,15,17,18开头
userphone = input('请输入>>>:').strip()
if len(userphone) == 11:
if userphone.isdigit():
if userphone.startswith('13') or userphone.startswith('15') or userphone.startswith('17'):
print('输入正确')
else:
print('开头错误')
else:
print('请输入纯数字')
else:
print('请输入11位数!')
# 调用re模块(正则)
import re
phone_number = input('please input your phone number:')
if re.match('^(13|15|17|19)[0-9]{9}$'),phone_number
print('输入正确')
else:
print('输入错误')
字符组
特征中括号括起来[] ,字符串默认只能单个单个字符匹配
[0123456789] # 可以匹配到0到9的任意一个字符,每次输出一个
[a-z] [A-Z] # 每次匹配其中的任意一个字符。输出一次
[0-9a-zA-Z] # 每次一个不用空格分离,在正则中,空格属于符号
特殊符号
特殊符号也只能匹配单个字符
. 匹配除换行符任意一个符号(万能符)
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结尾
'''^与$组合只用可以精准限制要查找的数据(数据只能实在两个符号中间)'''
a|b 匹配字符a或者b(匹配其中一个)
() 匹配括号内的表达式也表示一个组(不会影响正则表达式的匹配单纯的分组而已)
[...] 匹配字符组中的字符
[^...] 匹配除字符中的所有字符
# ^在[]里面。代表取反的意思
量词
1.表达式在没有量词的修饰的情况下,都是匹配单个的
2.量词必须结合(字符串,特殊符号)一起使用,不能单独出现
3.量词只能影响前面的一个表达式 # ab* 只能影响b
* 重复零次或者多次
+ 重复一次或者多次
? 重复零次或者一次
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n次到m次
贪婪匹配与非贪婪匹配
测试
<script>123</script>
贪婪正则
<.*> '''默认贪婪匹配,从<开始,一直到结尾最后一个>结束''' # <script>123</script>
非贪婪正则
<.*?> '''非贪婪匹配,从<开始碰到>就结束,下一次碰到<又一次开始>在此结束''' # <script> </script>
一些常见的正则可以到百度搜索
1.中文字符
[\u4e00-\u9fa5]
2.email地址
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
3.手机号
0?(13|14|15|17|18|19)[0-9]{9}
4.身份证号
\d{17}[\d|x]|\d{15}