1.模块

  1.  模块的定义:我们把装有特定功能的代码进行归类的结果.我们目前写的所有py文件都是模块

  2. 引入模块的方式:

     1.import  模块名

     2.from xxx import 模块名
2. collections模块
1.Counter Counter是一个计数器,主要用来计数
例.计算字符串中每个字符出现的次数 常规写法
s="alex like pig"
dic={}
foc c in s:
dic[c]=dic.get(c,0)+1
print(dic)
这样的过程比较繁琐 Counter
s="alex like pig"
print(Counter(s)) #获取到的可以像字典一样使用 2.stack 栈 先进后出
例.
class StackFullError(Exception):
  pass
class StackEmptyError(Exception):
  pass
class stack: #定义一个类,栈
  def __init__(self,index,size):
  self.index=index
  self.size=size
  self.list=[]   def push(self,item) #往栈里面添加一个元素
   if self.size==self.index #先判断栈是否装满了
      raise StackFullEorr("满了,装不下了")
    self.list.inser(self.index,item)
    self.index+=1 装完指针上移
  def pop(self):
    if self.idex==0
      raise StackEmptyError("没有了")
    selt.index-=1            #指针下移到有值的地方去取值
    item=selt.list.pop(self.index) #弹出
    return item #返回值
    
这是默认情况下指针的指向


  3.queue 队列    特点是先进先出
import queue
   q.queue.Queue.()
   q.put("张三")
   q.put("李四")
   q.put("王五") 
   print(q)
   print(q.get())
   print(q.get())
   print(q.get())
   print(q.get()) #获取完了,里面没有元素了,此时程序会阻塞

   4.deque  双向队列  两边都可进可出

   from collections import deque
   q=deque()
   q.append("张三") #默认右边添加
   q.append("李四")
   q.appendleft("王五")  
   q.appendleft("马六") #从左边添加  
   print(q)
   print(q.pop()) #默认右边删除
   print(q.pop()) #可以从左边删除
  5.namedtuple 就是对元组里面的元素进行命名
   from collections import namedtuple
   nt=namedtuple("point",["x","y"]) 
   p=nt(1,2) #k可以表示一个点的坐标
   print(p.x)
   print(p.y)
   p.x=233 #不可行,会报错,因为是元组 #类似的
#
   #Circle = namedtuple('Circle', ['x', 'y', 'r'])
  6.defaultdict   可以给字典设置默认值,当key不存在时,直接获取默认值
  lst=[11,22,33,44,55,66,77,88,99]
  d=defaultdict(list)
  for el in lst:
  if el<66:
  d["key1"].append(el) #key1默认是不存在的,但是可以拿到key1,[] 执行可执行的创作-->创建一个列表
  else:
  d["key2"].append(el)
  print(d)     #原生字典的解决方案

    values = [11, 22, 33,44,55,66,77,88,99,90]

    my_dict = {}

    for value in values:
      if value>66:
        if my_dict.has_key('k1'):
         my_dict['k1'].append(value)
        else:
          my_dict['k1'] = [value]
      else:
        if my_dict.has_key('k2'):
          my_dict['k2'].append(value)
        else:
          my_dict['k2'] = [value]


  7.Orderdict  字典是无序的

    在对dict做迭代时,我们无法确定Key的顺序。

    如果要保持Key的顺序,可以用OrderedDict:    

    >>> from collections import OrderedDict
    >>> d = dict([('a', 1), ('b', 2), ('c', 3)])
    >>> d # dict的Key是无序的
    {'a': 1, 'c': 3, 'b': 2}
    >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    >>> od # OrderedDict的Key是有序的
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])

    注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:   

 
3.时间模块
  

   在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:

     (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

     (2)格式化的时间字符串(Format String): ‘1999-12-06’   (strftime)%Y-%m-%d %H:%M:%S 注意大小写

     (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

      

例.1

 print(time.time())  #获取当前时间,1542167410.2138798  从1970-01-01 00:00:00到现在经过多少秒
                    #数据库储存 数据库存储的就是这个时间
例.2
while 1:
s=time.strftime("%Y-%m-%d %H:%M:%S") #使用频率最高 格式化时间
print(s)
time.sleep(1)
例.3
print(time.localtime())   #结构化时间 获取当前时间的结构化时间
tt=time.localtime(1888888888)
ttt=time.strftime("%Y-%m-%d %H:%M:%S",tt) 把获得的当前时间结构后之后再进行格式化
print(ttt) 例.4
s="2018-11-22 12:12:33"
t=time.strptime(s,"%Y-%m-%d %H:%M:%S") #把字符串时间格式化为格式化时间
print(t)
tt=time.mktime(t) #把结构化时间化为时间戳
print(tt)

               

例.5 时间计算
(这种方法会因为月份天数的不同而产生误差,慎用)
s="2018-10-22 13:23:32"
s1="2018-11-23 14:12:32"
ss=time.strptime(s,"%Y-%m-%d %H:%M:%S") #结构化时间
ss1=time.strptime(s1,"%Y-%m-%d %H:%M:%S") t1=time.mktime(ss) #转换成时间戳
t2=time.mktime(ss1) _t=t2-t1 #用时间戳相减 秒级的时差 ttt=time.gmtime(_t) #时间戳相减后(时间差)再结构化时间
print(ttt)
print("过去了%d年%d月%d天%d时%d分%d秒"%(ttt.tm_year-1970,ttt.tm_mon-1,ttt.tm_mday-1,ttt.tm_hour,ttt.tm_min,ttt.tm_sec))
例.6 时间计算(比较推荐这一种,不会出错)
s="2018-10-22 13:23:32"
s1="2018-11-23 14:12:32"
ss=time.strptime(s,"%Y-%m-%d %H:%M:%S") #结构化时间
ss1=time.strptime(s1,"%Y-%m-%d %H:%M:%S") t1=time.mktime(ss) #转换成时间戳
t2=time.mktime(ss1)
_t=t2-t1                           #用时间戳相减  秒级的时差

#转换成分钟
min=int(_t//60)      #把秒级时间差转换成分钟
print(min) _hour=min//60 #再把分钟差转化成多少小时,多少分钟
_min=min%60 print("时间差是%s小时,%s分钟%(_hour,_min))
附:日期格式化标准
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月分内中的⼀天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的月期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期天为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的


#时间戳-->结构化时间
#time.gmtime(时间戳) #UTC时间,与英国伦敦当地时间一致
#time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)


#结构化时间-->时间戳 
#time.mktime(结构化时间)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0

 
#结构化时间-->字符串时间
#time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 14:55:36'
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
'2017-07-14' #字符串时间-->结构化时间
#time.strptime(时间字符串,字符串对应格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1
 
#这里的了解就好
#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017' #时间戳 --> %a %b %d %H:%M:%S %Y串
#time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'

 
4.random
import random
print(random.randint(1,4))   #[star:end]1-4都有
print(random.uniform(1,5)) #(1,5)随机小数
print(random.random()) #产生0-1的随机小数 print(random.randrange(1, 10, 2)) # 1-10奇数 [1,10)
print(random.choice([1,2,["水电费","华盛顿"]]))   #从一个元素里面随机选择一个
print(random.sample([1,2,["水电费","华盛顿"]],2)) #从两个元素中随机取两个
lst = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(lst) # 随机打乱顺序
print(lst)
5.os模块
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若⽬录为空,则删除,并递归到上一级目录,如若也为空,则
除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若⽬录不为空则无法删除,报错;相当于shell中
rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方
打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command).read() 运行shell命令,获取执行结果
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
# os.path
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值
即os.path.split(path)的第⼆个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是⼀个存在的⽂件,返回True。否则返回False
os.path.isdir(path) 如果path是⼀个存在的⽬录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第⼀个绝对路径之前的参数
将被忽略
os.path.getatime(path) 返回path所指向的⽂件或者⽬录的最后访问时间
os.path.getmtime(path) 返回path所指向的⽂件或者⽬录的最后修改时间
os.path.getsize(path) 返回path的⼤⼩
# 特殊属性:
os.sep 输出操作系统特定的路径分隔符, win下为"\\",Linux下为"/"
os.linesep 输出当前平台使⽤的⾏终⽌符, win下为"\r\n",Linux下为"\n"
os.pathsep 输出⽤于分割⽂件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使⽤平台。 win->'nt'; Linux->'posix'
6.sys模块
sys.argv 命令⾏参数List,第⼀个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使⽤PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称

day20 模块 collections time sys os的更多相关文章

  1. day19:常用模块(collections,time,random,os,sys)

    1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾.re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re. ...

  2. 8.2,常用模块介绍:sys,os,time,random

    sys: 介绍:主要包含涉及python编译器与系统交互的函数. 常用函数: import sys print(sys.argv)#本文件名,已经运行该程序时的参数 #[如在命令窗口中python3 ...

  3. 第十篇、模块一、sys\os\hashlib模块的应用

    一.模块分为三种 1)自定义模块 2)第三方模块 3)内置模块 如何导入模块? 下面两种: 1)import 模块名字  as 别名(重新给模块命名) 2)from  模块名字  import 功能( ...

  4. day18 python模块 random time sys os模块

    day18 python   一.random模块     取随机整数 import random print(random.randint(1,2))                 #顾头顾尾 p ...

  5. python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)

    1.昨日内容回顾 1.正则表达式     # 正则表达式 —— str           # 检测字符串是否符合要求     # 从大段的文字中找到符合要求的内容 1).元字符 #. # 匹配除换行 ...

  6. Python基础(11)_python模块之time模块、rando模块、hashlib、os模块

    一.模块 1.什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀 模块的本质:模块的本质是一个py文件 2.模块分为三类:1)内置模块:2)第三方模块: ...

  7. 21 模块(collections,time,random,os,sys)

    关于模块importfrom xxx import xxx2. Collections1. Counter 计数器2. 栈: 先进后出.队列:先进先出deque:双向队列3. defaultdict ...

  8. python常用模块collections os random sys

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

  9. oldboy edu python full stack s22 day16 模块 random time datetime os sys hashlib collections

    今日内容笔记和代码: https://github.com/libo-sober/LearnPython/tree/master/day13 昨日内容回顾 自定义模块 模块的两种执行方式 __name ...

随机推荐

  1. 如何关闭打开了多个activity的activity

    专门建立一个类,内部有一个静态的linklist对象,用来记录打开的activity,如果该ACTIVITY没有被打开过,在每一个activity oncreate方法中将自己的实例加入这个list. ...

  2. MarkdownPad 2 安装和破解

    MarkdownPad 2 安装和破解 下载:http://markdownpad.com/ 下载下面这个: 破解:http://w3cboy.com/post/2014/10/MarkdownPad ...

  3. RabbitMQ 相关概念和方法详解

    名词解释 ConnectionFactory: 与 RabbitMQ 服务器连接的管理器. Connection: 与 RabbitMQ 服务器的连接. Channel: 与 Exchange 的连接 ...

  4. 关于Spring注解配置的步骤

    今天分享一下 关于Spring注解配置的流程 1 导包:如下图所示 2 书写User和Car类  代码如下 package cn.lijun.bean; public class Car { priv ...

  5. ios MVC笔记

    MVC:Model 模型 View 视图 Controller  控制器 关系图:

  6. javax.servlet.http.httpServletRequest接口

    HttpServletRequest接口中常用的方法:   - String getContentPath();//获取webapp根目录路径,如下图:   下面研究request到底是一个怎样的范围 ...

  7. SQL CTE 递归 查询省,市,区

    IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb ) , pid ) , name )) ' , null , '广东省') ' , '广州市') ' , '深 ...

  8. Java命令之javap初探

    javap是jdk自带的一个工具在jdk安装目录的/bin下面可以找到,可以对代码反编译,也可以查看java编译器生成的字节码,对代码的执行过程进行分析,了解jvm内部的工作. 下面列举javap命令 ...

  9. dubbo心跳机制 (2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 来看一下HeaderExchangeServer.this.getChannels():   1     p ...

  10. win10下安装配置mysql-8.0.13--实战可用

    1.下载mysql-8.0.13安装包 1 https://dev.mysql.com/downloads/mysql/ 选择zip安装包下载就好. 2.解压到你要安装的目录 3.创建my.ini配置 ...