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. Mediaplayer

    Mediaplayer报错 prepareAsync called in state 1     是因为在setDataSource之前调用了prepare.因为setDataSource放到了线程里 ...

  2. 第四天:servlet的生命周期和一些细节问题

    1.  servlet的生命周期: a)  流程 i.  Web服务器首先会检查是否装载了该servlet的实例对象.如果装载了直接进行第四步. ii.  装载并创建该servlet的实例对象. ii ...

  3. springboot启动过程(2)-run方法

    1 springApplication的run run方法主要是用于创造spring容器ConfigurableApplicationContext对象. public ConfigurableApp ...

  4. go install 命令

    go install 命令简介 用于编译并安装代码包或源代码文件 安装代码包会在当前工作区的 'pkg/<平台相关目录>'下生成'归档文件' 安装命令源码文件会在当前工作区的'bin'目录 ...

  5. windows xp版本的chrome浏览器去哪里下载呢?

    http://www.265.com/chrome-download/?slice 265没记错的话应该是GOOGLE的一个导航网站吧,所以可信度是比较高的.

  6. DIY的RPM包怎么签名呢 How to sign your custom RPM package with GPG key

    https://gist.github.com/fernandoaleman/1376720  How to sign your custom RPM package with GPG key 这是文 ...

  7. 3.内网渗透之reGeorg+Proxifier

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxIAAAE2CAIAAAB6BDOVAAAgAElEQVR4Aey9Z5Aex3X327MRGVzkRH ...

  8. [jQuery]使用jQuery.Validate进行客户端验证(初级篇)

    以前在做项目的时候就有个很大心病,就是微软的验证控件,虽然微软的验证控件可以帮我们完成大部分的验证,验证也很可靠上手也很容易,但是我就是觉得不爽,主要理由有以下几点: 1.拖控件太麻烦,这个是微软控件 ...

  9. Html.DropDownListFor 练习

    需要创建一个List<SelectListItem>数据集,如下 使用已经存在FruitCategoryEntity.cs类的IEnumerable<FruitCategory> ...

  10. Java50道经典习题-程序49 子串出现的个数

    题目:计算首末不含空格各个子串之间只含一个空格的字符串中子串出现的次数分析:例如输入的字符串为"I come from County DingYuan Province AnHui.&quo ...