小知识点随记
一.__init__.py文件的用处
1.在py2中引用其他文件夹中的模块的时候,需要先建立一个__init__.py文件
1)在python3里面要是导入其他目录下的python文件的话:
如:from 第七周作业.core.login import login
注意:第七周作业.core是文件夹的名字,login是py文件名,login 是函数名
2)在python2里面如果要导入其他目录下的python文件的话,需要在这个文件下面建一个__init__.py文件
如果还是引用上面login 函数的话,需要先在core文件夹下建立一个__init__.py文件,那么他下面的函数或者文件才可以被引用
如:from 第七周作业.core.login import login
2.直接导入一个包
__init__.py就是区分普通文件夹和包的,当文件夹中存在__init__.py文件的时候,这个文件夹就是一个包
导入一个包的实质就是把这个目录下的__init__.py文件从上到下执行一次
假如hhh文件夹下有一个文件__init__.py,内容为:
print("今天天气真好!")
在文件夹test里直接import hhh 就可以了,执行结果就是:今天天气真好
程序的入口在哪个目录下,那么当前目录就再程序入口的目录下
例子:如果想在day7的文件夹test.py里引用包里的my.py文件的话
3.在引用包的时候,也操作其下面的py文件,采用hhh.my.my_func()的方式
1.由于引用包的实质是将包里的__init__.py内容执行一遍,那么需要先在__init__.py文件中导入my.py文件
2.虽然my.py文件和__init__.py在一个文件夹hhh下,可是程序的入口test.py在day7个目录下,那么当前目录就再day7的目录下,不可以用import my 代码从day7目录下导入my,需要使用from . import my,在__init__.py所在的文件下导入my
3.在入口test.py里面直接引用hhh包就可以,如下图:
上述是在运行入口使用hhh.my.my_func()的方式例子,方然也可以用py3中的那样from hhh.my import my_func也可以,不用在__init__.py文件里from . import my
二.贪婪模式与非贪婪模式
假如取标题中的URL,如下图:
1.贪婪模式,如下,他会把需要匹配的后面的内容不需要的也给全部返回来的
2.非贪婪模式:默认是贪婪模式的,要是想要非贪婪模式的话,就需要在后面加上一个?号
该网站可以查找一些常用的正则表达式http://tool.oschina.net/regex
三.os模块中的system命令和open命令的区别
1.system命令,执行的py文件的编码是UTF-8的,在windows中显示的结果是JDK格式的,所以显示乱码,使用read的时候python之间将显示的时候转为UTF-8了,所以显示是正确的,不会乱码
import os
os.system('ipconfig') # 这个方法,能执行命令,但是没办法获取结果
res=os.system('ipconfig')
print(res) #打印出来是一个0,如果输入的命令不存在的话,返回的结果就是1了
# 返回结果:
# Windows IP ����
#
#
# ��̫�������� ��̫��:
#
# ý��״̬ . . . . . . . . . . . . : ý���ѶϿ�����
# �����ض��� DNS �� . . . . . . . :
# 0
2.open命令,直接用open的话,返回的是内存地址
eg1:
import os
os.popen('ipconfig')
res=os.popen('ipconfig')
print(res) #返回的是一个内容地址<os._wrap_close object at 0x000000EDF095B748>
eg2:需要使用read方法获取一下,返回的是执行命令之后的返回结果
import os
res=os.popen('ipconfig').read()
print(res)
返回结果:
Windows IP 配置
返回结果
以太网适配器 以太网:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 2:
区别就是system没有返回值,open有返回值,当需要查询操作命令的返回结果的时候,就可以用open方法;执行的py文件的编码是UTF-8的,在windows中显示的结果是JDK格式的,所以显示乱码,使用read的时候python将显示的内容转为UTF-8了,所以显示是正确的,不会乱码
LInux下top命令是动态的监控服务器的资源,CUP、内存的使用率,这样的命令使用popen就不太好用了,直接用就会报错了
top -n 1每次只取一次,这样的话才可以获取到如:
import os
res=os.popen('top -n 1').read()
print(res)
四.zip函数,循环的时候同时循环两个list,字符串也可以,只有个数一样的都可以
eg1:
list1=[1,2,3]
list2=['xiaoming','niuniu','MLing']
for i,k in zip(list1,list2):
print(i,k)
返回结果:
1 xiaoming
2 niuniu
3 MLing
eg:2
list1="1234"
list2="MLIng"
for i,k in zip(list1,list2):
print(i,k)
返回结果:
1 M
2 L
3 I
4 n
注意:循环的列表或者字符串的个数最好一样不一样的话,只循环到都一样的部分