python----常用模块,python----模块,一、模块、包1.1


一、模块、包

1.1 什么是模块
在python中,一个.py文件就构成一个模块,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称。

1.2 什么是包(package)
包(package)本质就是一个文件夹,将功能相似的模块放到同一个文件夹中,构成一个模块包;该文件夹必须包含一个__init__.py文件,提醒Python该文件夹是一个包,
__init__.py可以是一个空文件,包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果你想导入其他目录下的模块,那么这个目录必须是一个包才可以导入。

1.3 安装包
  1)傻瓜式的
    pip install ****
  2)没有pip命令
    1.pycharm里面点python console
    2.找到python安装目录
    3.然后把安装目录下的scripts目录,加入到环境变量里面即可ps:环境变量在PATH里面加
  3)Unknown or unsupported command ‘install‘ 出来这个问提怎么解决
    1、打开 C:\strawberry\perl\bin\
    2、把这个目录下的pip 都改成其他的名字,这个对其他的没有影响
  4)手动安装
    1、whl结尾的安装包
      pip install redis-2.10.6-py2.py3-none-any.whl
    2、.tar.gz结尾的安装包
      1、解压这个压缩包
      2、进入到这个解压之后的文件夹里面
      3、在命令行里面运行 python setup.py install

1.4 导入模块,导入模块的本质就是把python文件拿过来从头运行一遍

1.4.1 从当前目录下找需要导入的python文件
1.4.2 从python的环境变量中找

1 import os2 from module import *  #导入该模块中的所有方法,慎用3 from module import fun1,fun2,fun3 #导入模块下的多个方法4 from day6.login_file.my_db import my_db #导入day6文件夹下login_file文件夹下my_db文件中的my_db函数

二、random模块

1 import random,string2 print(random.randint(1,10))#随机取整数3 print(round(random.uniform(1,99),2))#随机取2位小数(random.uniform生成浮点类型的随机小数,round(数值,精度)控制随机数的精度)4 print(random.choice([1,2,3,4,5]))#只能随机取1个元素5 print(random.sample(string.printable,5))#string.printable代表数字,字母和特殊字符,从序列中随机取5个元素6 print(random.randint(1,1000))#随机产生一个1-1000的数字7 print(‘1‘.zfill(4))#补0  生成4位数,不够在前面补0 ,前面‘‘中必须是字符串
1 #洗牌,打乱顺序2 pickts =[‘A‘,‘J‘,‘Q‘,‘K‘,2,3,4,5,6]3 random.shuffle(pickts)4 print(pickts)

三、string模块

1 print(string.ascii_lowercase)#所有的小写字母2 print(string.ascii_uppercase)#所有的大写字母3 print(string.digits)#所有的数字4 print(string.ascii_letters)#所有大写字母和小写字母5 print(string.punctuation)#所有的特殊字符

四、time&datetime模块

time和datetime模块主要用于操作时间

时间有三种表示方式,一种是时间戳:从unix元年到现在过了多少秒;一种是格式化时间:例如2018-04-27;一种是时间元组

1 print(time.time())#获取当前时间戳2 time.sleep(10)#停10秒3 today = time.strftime(‘%Y-%m-%d %H:%M:%S‘)#获取格式化好的时间4 print(time.gmtime())#默认取得是标准时区的时间5 print(time.localtime())#取得是当前时区的时间6 res = datetime.date.today() + datetime.timedelta(days=-5)#获取5天前的时间7 print(res) 

将一串数字转成日期格式,例如a = ‘19910608‘ 现要将a转成1991-06-08的时间格式,则先将字符串转成时间元祖,再将时间元祖转成格式化好的时间,方法如下:

1 timestr = ‘19910608‘2 t = time.strptime(timestr, ‘%Y%m%d‘)#转成时间元祖3 print(t)4 #打印结果是:time.struct_time(tm_year=1991, tm_mon=6, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=159, tm_isdst=-1)5 r = time.strftime(‘%Y-%m-%d %H:%M:%S‘,t)#转成格式化好的时间6 print(r)#打印结果是:1991-06-08 00:00:007 print(r[0:10])#打印结果是:1991-06-08


时间戳转换格式化时间

1.先把时间戳转成时间元组,用time.localtime()方法
2.再把时间元组转成格式化时间

1 s =time.localtime(1524299387.2033713)2 print(time.strftime(‘%Y-%m-%d %H:%M:%S‘,s))

打印结果就是:2018-04-21 16:29:47,转换成功!


将时间戳转换成格式化时间写成一个函数

 1 def timestamp_to_fomat(timestamp=None,format=‘%Y-%m-%d %H:%M:%S‘): 2     #1.默认返回当前格式化好的时间 3     #2.传入时间戳的话,把时间戳转成格式化好的时间,返回 4     if timestamp: 5         time_tulp = time.localtime(timestamp) 6         res = time.strftime(‘%Y-%m-%d %H:%M:%S‘,time_tulp) 7     else: 8         res = time.strftime(format)#默认取当前时间 9     return res10 print(timestamp_to_fomat())11 print(timestamp_to_fomat(197323242,‘%Y-%m-%d‘))

格式化时间转换时间戳

1.先把格式化好的时间转成时间元组
2.再把时间元祖转成时间戳

1 tp = time.strptime(‘2018-4-21‘,‘%Y-%m-%d‘)#先把格式化好的时间转成时间元组2 print(tp)3 print(time.mktime(tp))#再把时间元祖转成时间戳

打印结果就是:1524240000.0,转换成功!

将格式化时间转成时间戳写成一个函数

 1 def strToTimestamp(str=None,format=‘%Y%m%d%H%M%S‘): 2     #2018 -04-21 16:56:43 3     if str:#如果传了时间的话 4         tp = time.strptime(str,format)#转成时间元组 5         res = time.mktime(tp)#再转成时间戳 6     else: 7         res = time.time()#默认取当前的时间戳 8     return int(res) 9 print(strToTimestamp())10 print(strToTimestamp(‘2018-11-29 18:38:59‘,‘%Y-%m-%d %H:%M:%S‘))


datetime

1 import datetime2 print(datetime.datetime.today())#获取当前时间,精确到秒3 print(datetime.date.today())#精确到天4 5 res = datetime.date.today() + datetime.timedelta(days=-5)#获取5天前的时间6 res1 = datetime.datetime.today() + datetime.timedelta(minutes=5)#获取5分钟后7                                                       #weeks,days,minutes,seconds

五、os模块
5.1 操作系统与环境变量

import os #导入osprint(os.name) #操作系统类型,如果是posix 说明系统是linux unix 或 mac os x ;如果是nt 就是windows 系统print(os.uname()) #获取详细的系统信息,uname()函数在Windows上不提供,也就是说,os模块的某些函数是跟操作系统相关print(os.environ)  #当前系统的环境变量print(os.environ.get(‘PATH‘))  #要获取某个环境变量的值,可以调用os.environ.get(‘key‘)print(os.sep)  # 当前操作系统的路径分隔符,Linux环境都是/  window环境都是:print(os.linesep)  # 当前操作系统的换行符  \n  \r\nprint(os.pathsep)  # 当前系统的环境变量中每个路径的分隔符,linux是:,windows是;os.system(‘ipconfig‘)  #用来执行操作系统命令,只能执行,获取不到结果res = os.popen(‘ipconfig‘)  #用来执行操作系统命令,并且获取到返回结果.readprint(res)print(os.popen(‘ipconfig‘).read())os.popen(‘top -n 1‘).read()  #popen 无法执行top ping 等动态命令

5.2 操作文件和目录

print(os.getcwd())#取当前工作目录os.chmod("拼音.py",2)#给文件/目录加权限,对Windows下的不好使print(os.chdir("C:\\Users\yantiantian\Desktop\python课堂笔记\day6"))#更改当前目录print(os.getcwd())print(os.listdir(‘D:\\‘))#列出一个目录下的所有文件,所有文件都放到一个list里print(os.makedirs("ytt/python"))#创建文件夹时,父目录不存在时会自动帮你创建父目录print(os.mkdir("test2"))#创建文件夹,父目录不存在时直接报错print(os.removedirs("ytt/python"))#删除空目录print(os.rmdir("test2"))#只能删除文件夹print(os.remove("C:\\Users\yitai\Desktop\python课堂笔记\day6\logs\android\android_2018-04-12.log"))#只能删除文件,不能删文件夹print(os.stat("拼音.py"))#获取文件信息os.rename("test", "test1")  # 重命名
#__file__#获取当前文件的绝对路径print(os.path.abspath(__file__))#获取绝对路径,能自动识别当前系统print(os.path.split("/usr/hehe/hehe.txt"))#分割路径和文件名的print(os.path.dirname("d:\\ly-code"))#获取父目录,获取它的上一级目录print(os.path.basename("d:\\ly-code"))#获取最后一级print(os.path.exists("d:\\ly-code"))#目录文件是否存在print(os.path.isabs("d:\\ly-code"))#判断是否绝对路径print(os.path.isdir("d:\\ly-code"))#判断是否是一个路径,目录是否存在print(os.path.isfile(r"E:\txz\day2.zip"))#判断是否是一个文件1.是否存在,2,必须是一个文件,r 转译特殊字符,当成普通字符对待(如\t)#没写路径的话就默认在当前路径下找,写了就在绝对路径下找print(os.path.getsize(‘C:\\Users\\yitai\\Desktop\\python课堂笔记\\day6\\logs\\android\\android_2018-04-13.log‘))#获取文件的大小,字节#上传文件不能超过2M,2M转成kb再转成字节来判断print(os.path.join("root",‘hehe‘,‘myswl‘,‘a.sql‘))#拼接成一个路径name = ‘a.sql‘print(os.path.join("e",name))#拼接成一个路径,(自动识别当前系统的路径分隔符,实现跨平台)

os.walk可以将文件夹下的子文件夹里的文件遍历出来,os.listdir()列出当前目录下的所有文件

os.walk返回的是一个二维数组,数组每个元素都包含绝对路径、文件夹、文件三个元素,可以用三个变量来循环

1 for abs_path,dir,file in os.walk(‘C:\\Users\yitai\Desktop\python课堂笔记\python课堂笔记\day6\logs‘):2     #abs_path 当前循环的绝对路径3     #dir 目录下面所有的文件夹 [ ]4     #file 目录下面的所有文件  []5     print(‘abs_path:%s,dir:%s,file:%s‘%(abs_path,dir,file))

os小练习如下:

在双数日期的日志文件 随便写点东西
1.获取到logs目录下面的所有文件 用os.walk()方法
2.根据文件名来判断,是否是双数日期 ,分割字符串,取到日期
3.12%2==0
4.打开这个文件 open()

1 import os2 for abs_path,dir,file in os.walk(r‘C:\Users\yitai\Desktop\python课堂笔记\python课堂笔记\day6\logs‘):#获取目录下的内容3     for f in file:4         day = f.split(‘.‘)[0].split(‘-‘)[-1]#分割字符串,取到日期5         print(day)6         if int(day)%2==0:7             file_name = os.path.join(abs_path,f)#拼接绝对路径8             open(file_name,‘a+‘,encoding=‘utf-8‘).write(‘写东西‘)

六、sys模块

1 print(sys.platform)#判断操作系统2 print(sys.path)#python的环境变量3 4 sys.path.append(‘../day5‘)#加入到环境变量中最后一位5 sys.path.insert(‘../day5‘)#加入到环境变量中第一位,效率更高6 7 print(sys.argv)#用来获取命令行里面运行python文件的时候传入的参数

七、hashlib模块

hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。
加密需要先实例化MD5对象,再将字符串转成bytes类型(加密必须得是bytes类型,不能直接对字符串加密)进行加密,且md5是不可逆的!

1 m =hashlib.md5()#实例化md5对象2 passwd =‘ytt123456‘3 # passwd.encode()#把字符串转成bytes类型4 #加密必须得是bytes类型5 m.update(passwd.encode())#不能直接对字符串加密,要先把字符串转成bytes类型6 print(m.hexdigest())7 #md5是不可逆的

将加密写成一个函数如下:

1 def my_md5(str):2     new_str = str.encode()#字符串转成bytes类型3     #new_str = b‘%s‘%str##字符串转成bytes类型4     m = hashlib.md5()#实例化md5对象5     m.update(new_str)#加密6     return m.hexdigest()#获取结果返回

八、xpinyin(拼音)模块

1 import xpinyin2 p = xpinyin.Pinyin()#实例化3 res = p.get_pinyin(‘烘干‘)#默认不传后面的话,两个拼音之间会有- 链接4 print(res)5 print(p.get_pinyin(‘烘干‘,‘‘))#汉字转成拼音

九、写excel模块

1 import xlwt2 book = xlwt.Workbook()#新建一个excel3 sheet = book.add_sheet(‘sheet1‘)#加sheet页4 sheet.write(0,0,‘姓名‘)#行、列,写入的内容5 sheet.write(0,1,‘年龄‘)6 sheet.write(0,2,‘性别‘)7 book.save(‘stu.xls‘)#结尾一定要用.xls

十、json模块

 1 import json 2 #json串是一个字符串 3 f = open(‘product‘,encoding=‘utf-8‘) 4 res = f.read() 5 print(json.loads(res))#字符串变成字典 6 product_dic = json.loads(res)#把字符串,变成python的数据类型 7 print(type(product_dic)) 8 print(product_dic.get(‘product_info‘)) 9 10 print(json.load(f))#传一个文件对象,它会帮你读文件
 1 d = { 2     ‘zll‘:{ 3         ‘addr‘:‘北京‘, 4         ‘age‘:28 5     }, 6     ‘ljj‘:{ 7         ‘addr‘:‘北京‘, 8         ‘age‘:38 9     }10 }11 #12 fw = open(‘user_info.json‘,‘w‘,encoding=‘utf-8‘)13 dic_json = json.dumps(d,ensure_ascii=False,indent=4)#字典转成json,字典转成字符串14                          #显示为中文        缩进4格15 print(dic_json)16 fw.write(dic_json)17 18 json.dump(d,fw,ensure_ascii=False,indent=4)#操作文件,自动帮你写了

json文件小练习

 1 import json 2 def op_data(filename,dic=None): 3     if dic:#字典不为空,写入 4         with open(filename,‘w‘,encoding=‘utf-8‘) as fw: 5             json.dump(dic,fw,ensure_ascii=False,indent=4)#操作文件,自动帮你写了 6     else: 7         with open(filename,encoding=‘utf-8‘) as fr: 8             return json.load(fr)#传一个文件对象,它会帮你读文件 9 10 FILE_NAME = ‘user_info.json‘11 all_users =op_data(‘user_info.json‘)12 print(all_users)13 for i in range(3):14     choice = input(‘输入,1注册,2删除‘)15     if choice ==‘1‘:16         username = input(‘username:‘)17         pwd = input(‘pwd:‘)18         if username not in all_users:19             all_users[username] =pwd20             op_data(FILE_NAME,all_users)21     elif choice ==‘2‘:22         username =input(‘username:‘)23         all_users.pop(username)24         op_data(FILE_NAME,all_users)



python----常用模块

评论关闭