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. Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor

    Bitmap bmp =BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); Paint paint = new ...

  2. 第二部分 实习操作课程 第一节 ArcGIS Online的基本功能

  3. MediaRecorder录像那些事

    最近在做一个项目需要运用到MediaRecorder的API,之前都没接触过这部分,开始着手弄的时候各种各样的问题,真是让人崩溃呀! 最后通过网上的资料和大神的指点,当然也有自己几天坚持不懈的努力,终 ...

  4. C++ string操作(转载)

    1.string类的构造函数 string(const char * s); //用s字符串初始化 string(const string &s);//用string类的s初始化 string ...

  5. C# Socket 接受数据不全的处理

    由于Socket 一次传输数据有限,因此需要多次接受数据传输. 解决办法一:     int numberOfBytesRead = 0;     int totalNumberOfBytes = 0 ...

  6. SQLServer存储引擎——01.数据库如何读写数据

    一.引言 在SQL Server数据库中,数据是如何被读写的?日志里都有些什么?和数据页之间是什么关系?数据页又是如何存放数据的?索引又是用来干嘛的? 一起看看SQL Server的存储引擎. 二.S ...

  7. The King’s Problem 强连通

    题意  有n个城市 m条有向边 将n个城市分成几个州 1.强连通必定在一个州里 2.州里的任意两个城市  u,v     满足u到v 或者v到u  其一即可 先缩点  然后求最小路就覆盖 #inclu ...

  8. spark(1) - ubuntu 下 spark 安装

    简单步骤: 前提:hadoop 环境搭建(我的是伪分布式) 1.官网下载spark 2.spark部署(单机模式): (1)解压 (2)移动文件到自定义目录下(同时修改文件名-原来的名字太长) (3) ...

  9. [BZOJ4521][Cqoi2016]手机号码 (数位dp)

    题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...

  10. Cardinality (基数)

    名词 Cardinality:    优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数,叫做Cardinality.    比如,一张表T有1000行数据,列COL1 ...