1.测试代码的规范
输入以下代码:
if __name__ = '__main__'
2.模块的分类
(1)python标准库
(2)第三方模块
(3)应用程序自定义模块
引用:from XXX import add 类似此类
与系统打交道的模块:
import sys
sys.path() ##只会将执行文件的路径加入!!!!!
以后入口文件和程序的起始点最好都命名为bin文件
如果要调用的文件在几层包的内部,可以用 . 来进行获取: from web.web1.web3 import cal (其中web是与执行文件同层的包,内部执行了web3里的_init_文件)
3._name_ == '_main_' 的应用
用if判断可以用于测试函数是否能正常使用
!!当该文件被调用时,_name_就不等于_main_了,而是等于文件所在位置,所以判断语句不会被执行
4.time时间模块
(1)时间戳
time.time() 从1970年0时0分0秒开始算起
(2)结构化时间
time.localtime()
import time a = time.localtime() print(a.tm_year,a.tm_mday)
通过其下面的属性可以得到具体的年份等
time.gmtime() 以英国天文台的时间计算,既世界标准时间,UTC
如何将结构化时间转化为时间戳?-- mktime()方法
print(time.mktime(time.localtime()))
!!将结构化时间转化为字符串时间!!重点---strftime() 功能
print(time.strftime('%Y-%m-%d %X',time.localtime()))
其中年要用大写的Y表示,中间的连接字符可以自定义 X表示时分秒
将字符串时间转换为结构化时间!! strptime()功能
print(time.strptime('2020:2:16:18:13:23','%Y:%m:%d:%X'))
有一种内置格式-- time,asctime() 将结构化时间转化为一种固定的格式 默认为localtime
格式如 : Sun Feb 16 18:18:38 2020
time.ctime()功能可将时间戳转化为与asctime()格式相同的时间表示方式
5.datatime模块
import datetime print(datetime.datetime.now())
输出值为2020-02-16 18:25:52.685993
6.random模块
(1)random() #(0,1)--float 为0到1的浮点数
(2)randint() #(1,10) --int 输出自定义区间内的整形 包含10
(3)randrange() #(1,10) --int 不包含10
(4)choice() #[ ] #加入一个列表,随机取列表中的值 !!!重点!!!可用于验证码
(5)sample() #[] 加入列表,但可以选择选取的数量, 如random.sample([11,22,33],2) 选取两个值
(6)uniform(1,10) #()---float 任意范围内的浮点数,自由设置
(7)shuffle() 打乱所给列表的顺序
import random ret = [2,3,4,5] random.shuffle(ret) print(ret)
随机验证码程序
用chr()来获取小写a-z 加上 大写A-Z 字母 其对应在ASCII码的范围为(65,122)
随机五位验证码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import random def v_code(): ret = '' for i in range(5): num = random.randint(0,9) alp = chr(random.randint(65,122)) s = str(random.choice([num,alp])) ret += s return ret print(v_code())
os.path.abspath(__ file__()) 获取当前文件的绝对路径
当别人调用你的文件时,通过os和sys添加文件地址,可用以下方法:BASE_DIR
import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR)
7. OS模块
(1)os.path.dirname() 返回path的目录,获取上一级目录的位置
(2)os.path.abspath() 获取文件的绝对地址
(3)os.getcwd() 获取当前文件的工作目录
(4)os.chdir() 改变当前的工作目录
返回到上一层的工作目录:加入..参数
os.chdir('..') print(os.getcwd())
(5)os.makedirs()创建多层递归目录
(6)os.removedirs('模块/file1/file2') 删除目录文件,注意用getcwd()查看当前所在目录 删除时默认删除空的文件夹,包括上一级,如果上一层有内容则不删除
(7)os.mkdir() 生成单级目录
(8)os.rmdir() 删除单级空目录
(9)os.listdir() 列出当前目录下所有的文件
输出值:['OS模块.py', '时间模块.py', '查询 修改 以及警报器.py', '随机红包程序.py']
(10)os.remove() 指定删除一个文件
(11)os.rename() 修改文件名字
(12)os.stat() 获取某个文件的具体属性信息,如大小有多少字节 st_mtime参数 为上一次修改的时间,以后会用到
(13)os.sep() 输出操作系统下特定的路径分隔符
(14)os.linesep() 输出当前平台下使用的行终止符 如:win下为 ' ', Linux下为 ' '
(15)os.pathsep() 输出分割文件的分隔符 如:win下为; Linux下为:
(16)os.name() 输出当前平台的名字,如: win 为 ‘nt’ , Linux 为 ‘posix’
(17)os.system('dir') 获取当前文件下的信息
(18)os.environ 获取系统环境变量
(19)os.path.split(path) 将path分割成目录和文件名按元组返回
(20)os.path.basename() 获取路径文件的文件名!!!
(21)os.path.exists() 判断路径是否存在,返回布尔值
(22)os.path.isabs() 判断是否是绝对路径
(23)os.path.isfile() 判断是否是存在的文件
(24)os.path.join(a,b) 将多个路径组合拼接,内部会自动找到系统内部的分隔符,进行拼接!!! 重点
(25)os.path.getatime() 返回文件或目录的最后存取时间
(26)os.path.getmtime() 返回文件或目录的最后修改时间
8.sys模块
(1)sys.path 获取路径
(2)sys.exit(n) 退出程序
(3)sys.version 获取python解释程序的版本信息
(4)sys.argv 使其能在命令行内添加参数 在python内部就能获取到别人执行的操作,是上传post还是别的
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
sys.argv command = sys.argv[1] path = sys.argv[2] if command == 'post': elif command == 'get':
(5)sys.stdout.write() 可模拟进度条
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import sys,time for i in range(10): sys.stdout.write('#') time.sleep(1) sys.stdoout.flush()
9.json模块 !!!重点!! 序列化
(1)json.dumps() 将数据类型转换为json字符串类型,必须是双引号!!! 内部会将所有引号变成双引号
json处理:(首先将有单引号的变成双引号,再在外部用一个单引号包起来)
{'name':'chris'} ---> '{"name":"chris"}' 8 ---> '8' [11,22] --> "[11,22]" 'hello' --> '"hello"'
可用json方法把字典转换为字符串传输到文本当中:
import json dic = {'name':'chris'} dic = json.dumps(dic) f = open('new','w') f.write(dic)
用json.dump()也能实现,而且两步合为一步 ——> json.dump(dic,f)
(2)json.loads() 可将文本中的字符串及其本身的类型提取出来,既反序列化
with open('new','r') as f: a = json.loads(f.read()) print(a) print(type(a))
此时文本new中的字符串的字典类型就被提取出来了 ,用 json.load() 也能实现,少了一步read ——> a = json.load(f) print(a)
10.pickle模块 将数据类型序列化,处理成字节,支持类型多,但是需求少
使用与json()一样
import pickle with open('new','wb') as f: dic = pickle.dumps(dic) print(type(dic))
此时输出的类型为bytes,字节类型
11.shelve模块
open()方法 存入字典,会生成三个文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import shelve f = shelve.open(r'mokuai') f['stuinfo'] = {'name':'chris'} f['stuinfo2'] = {'name':'joe'} f['stuinfo3'] = {'name':'lin'} f.close
取值方法--> print(f.get('stuinfo')['name'])
12.xml模块
xml的格式如下,就是通过<>节点来区别数据结构的:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
里面的data就是一个根对象,也叫根节点,下面三个country都是节点对象,相当于分支对象
(1)parse() 读取与连接文件 解析文件
用一个对象来承载,此时tree变量就是一个对象,之后这个对象就可以使用其方法
import xml.etree.cElementTree as et
tree = et.parse('xml数据'
(2)getroot()
import xml.etree.cElementTree as et tree = et.parse('xml数据') root = tree.getroot() print(root.tag)
这里就获得了根对象的标签data
(3)attrib() 获取标签的属性值
(4)text() 获取标签的内容
(5)iter() 只遍历一个节点内容
for i in root.iter('year'):
print(i.text)
(6)set() 对内容进行修改 最后要write()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
for node in root.iter('year'): new_year = int(node.text)+1 node.text = str(new_year) node.set('updated','yes') node.set('version','1.0') tree.write('test.xml')
(7)find()寻找标签 findall() 查找多个对象
(8)remove() 删除数据
下面为删除排名大于50的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import xml.etree.cElementTree as et tree = et.parse('xml数据') root = tree.getroot() for i in root.findall('country'): a = int(i.find('rank').text) if a > 50: root.remove(i) tree.write('xml数据')
(9)如何生成一个xml数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import xml.etree.ElementTree as ET new_xml = ET.Element("namelist") #创建根节点 name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) #创建子节点 age = ET.SubElement(name, "age", attrib={"checked": "no"}) sex = ET.SubElement(name, "sex") sex.text = '33' name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"}) age = ET.SubElement(name2, "age") age.text = '19' et = ET.ElementTree(new_xml) # 生成文档对象 生成文档树 !!!必不可少 et.write("test.xml", encoding="utf-8", xml_declaration=True) ET.dump(new_xml) # 打印生成的格式