一、random模块    

import random
# print(random.random()) #0到1之间数
# print(random.uniform(10,20)) #范围内小数
# print(random.randint(1,12)) # 指定范围内的数字包含右半部分
# print(random.randrange(1,12)) #指定范围 不包含右半部分.可以加步长
# ret = random.sample('abcs',2) #一个可迭代对象,返回多个值
# print(ret) #打乱顺序可以加选择的参数
# print(random.choices([1,2,3])) #参数是可迭代对象返回一个列表
# print(random.choice({'a':1,'b':1,'d':1})) #参数是一个可迭代对象,返回一个值
#验证码程序
# code = ""
# for i in range(4):
# char_upper = chr(random.randint(65,90))
# char_lower = chr(random.randint(97,122))
# num = str(random.randrange(10))
# ret = random.choice([char_upper,char_lower,num])
# code += ret
# #code = ''.join[code,ret]
# print(code)
#shuffle 打乱顺序
# a = [2,3,5,6,7]
# print(random.shuffle(a))
# print(a)

二 os模块

os模块是与操作系统交互的一个接口

'''
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
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.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command) 运行shell命令,获取执行结果
os.environ 获取系统环境变量 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的大小
'''
#创建序列化的文件夹
# with open('nameinfo',encoding='utf-8') as f:
# for i in f:
# i = i.strip()
# print(os.path.exists(r'D:\abc\%s'%i))
# if not os.path.exists(r'D:\abc\%s'%i):
# os.mkdir(r'D:\abc\%s'%i)
# #
# abcdir_list = os.listdir(r'D:\abc')
# print(abcdir_list)
# for name in abcdir_list:
# if not os.listdir(r'D:\abc\%s'%name):
# # os.rmdir(r'D:\abc\%s'%name)
# # else:
# os.remove(r'D:\abc\%s'%name)
# # os.rmdir(r'D:\abc')
#查看获取当前脚本的绝对路径
import os
import sys
import shutil
if __name__ == "__main__":
print(os.path.abspath(sys.argv[0]))
print(os.path.split(os.path.realpath(sys.argv[0])))
print (os.path.split(os.path.realpath(sys.argv[0])) #
# os.remove(path) #删除文件
# os.removedirs(path) #删除空文件夹
# shutil.rmtree(path) #递归删除文件夹

小演练

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。

1、以某种存储形式使自定义对象持久化
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。
1)json
import json  #json中和文件操作的dump用的较少,可以用dumps 和write
dic = {'str':'张','k2':'v2','k3':'v3'}
l = (1,2,3)
str_dic = json.dumps(dic)
print(repr(str_dic),type(str_dic))
# dic1 = json.loads(str_dic)
# print(dic1)
# str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串
# print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
# #注意,json转换完的字符串类型的字典中的字符串是由""表示的
# with open('nameinfo','a') as f:
# str_dic1 = json.dumps(dic)
# f.write(str_dic)
# dic1 = json.loads(str_dic)
# print(dic1)
with open('nameinfo','r') as f: #R+和r模式都不影响解码 不过对于多行用for循环解码
for line in f:
# line = line.strip()
str_dic2 = json.loads(line)
print(str_dic2)

json & pickle   shelve模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换
  • shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
    shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。
  • import json  #json中和文件操作的dump用的较少,可以用dumps 和write
    dic = {'str':'张','k2':'v2','k3':'v3'}
    l = (1,2,3)
    str_dic = json.dumps(dic)
    # print(repr(str_dic),type(str_dic))
    # dic1 = json.loads(str_dic)
    # print(dic1)
    # str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串
    # print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    # #注意,json转换完的字符串类型的字典中的字符串是由""表示的
    # with open('nameinfo','a') as f: # 写的时候可以写ab模式 也可以a
    # str_dic1 = json.dump(dic,f)
    # f.write(str_dic)
    # dic1 = json.loads(str_dic)
    # print(dic1)
    # with open('nameinfo','rb') as f: #Rb和r模式都不影响解码 不过对于多行用for循环解码
    # # t = f.read()
    # # print(t)
    # for line in f:
    # # line = line.strip()
    # print(line)
    # str_dic2 = json.loads(line)
    # print(str_dic2)
  • # import pickle   #写文件和读文件只能用rb模式
    # dic = {'k1':'v1','k2':'v2','k3':'v3'}
    # l = {1,2,3}
    # # str_dic = pickle.dumps(l)
    # # print(str_dic)
    # # dic2 = pickle.loads(str_dic)
    # # print(dic2)
    # with open('nameinfo','ab') as f:
    # pickle.dump(dic,f)
    # with open('nameinfo','rb') as f:
    # ret = pickle.load(f)
    # print(ret)
    import shelve          #
    with shelve.open('ff') as f:
    f['k1'] = dic
    f['k2'] = l
    f['k1'] = 'this was not here before'
    with shelve.open('ff') as f:
    print(f,type(f['k1']))
    for i in f :
    print(i,f[i]) s = shelve.open('test.dat')
    s['x'] = ['a', 'b', 'c']
    s['x'].append('d')
    s['x']
    #['a', 'b', 'c']
    # 存储的d到哪里去了呢?其实很简单,d没有写回,你把['a', 'b', 'c']
    # 存到了x,当你再次读取s['x']
    # 的时候,s['x']
    # 只是一个拷贝,而你没有将拷贝写回,所以当你再次读取s['x']
    # 的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量,如下所示
    # 在python2.4中有了另外的方法,就是把open方法的writeback参数的值赋为True,这样的话,你open后所有的内容都将在cache中,当你close的时候,
    # 将全部一次性写到硬盘里面。如果数据量不是很大的时候,建议这么做。
    # writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;
    # 但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,
    # 并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。
    # 因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。
    temp = s['x']
    temp.append('d')
    s['x'] = temp
    s['x']
    ['a', 'b', 'c', 'd']

    异常处理

  • 程序中难免出现错误

  • 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)
  • 2.逻辑错误(逻辑错误)
  • 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的 常用异常
    ArithmeticError
    AssertionError
    AttributeError
    BaseException
    BufferError
    BytesWarning
    DeprecationWarning
    EnvironmentError
    EOFError
    Exception
    FloatingPointError
    FutureWarning
    GeneratorExit
    ImportError
    ImportWarning
    IndentationError
    IndexError
    IOError
    KeyboardInterrupt
    KeyError
    LookupError
    MemoryError
    NameError
    NotImplementedError
    OSError
    OverflowError
    PendingDeprecationWarning
    ReferenceError
    RuntimeError
    RuntimeWarning
    StandardError
    StopIteration
    SyntaxError
    SyntaxWarning
    SystemError
    SystemExit
    TabError
    TypeError
    UnboundLocalError
    UnicodeDecodeError
    UnicodeEncodeError
    UnicodeError
    UnicodeTranslateError
    UnicodeWarning
    UserWarning
    ValueError
    Warning
    ZeroDivisionError 更多异常

    更多错误

    python解释器检测到错误,触发异常(也允许程序员自己触发异常)

    程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

    如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

    为什么要进行异常处理?

    python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。

    所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

基本语法

try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑

其他语法

s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
else:
代码正常时候走这个
万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

s1 = 'hello'
try:
int(s1)
except Exception as e:
print(e)
异常的finally  #try 也可以和finally 一起使用

s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:
print('try内代码块没有异常则执行我')
finally
print('无论异常与否,都会执行该模块,通常是进行清理工作')
主动触发异常

try:
raise TypeError('类型错误')
except Exception as e:
print(e)
自定义异常

class EvaException(BaseException):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg try:
raise EvaException('类型错误')
except EvaException as e:
print(e)
断言

# assert 条件

assert 1 == 1

assert 1 == 2

try except 和if 的比较

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性

使用try..except的方式

1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

day21 os random 序列json的更多相关文章

  1. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  2. python学习笔记(四)random 、json模块

    一.模块简介 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 导入模块 import module #导入模块 f ...

  3. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  4. 模块使用:time、datetime、calendar、sys、os、os.path、normcase和normapath、random、json、pickle

    ## time:时间 时间戳(timestamp):time.time() 延迟线程的运行:time.sleep(secs) (指定时间戳下的)当前时区时间:time.localtime([secs] ...

  5. Python 入门基础14 --time、os、random、json、pickle 常用模块1

    今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...

  6. day17--模块之time、calendar、datetime、sys、os、os.path、json、pickle、random

    一.时间模块(time,calendar,datetime) 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00 ...

  7. python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)

    前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...

  8. random,json,pickle,hashlib,shutil,hmac,shelve 模块

    一,复习 ''' 项目开发规范 ATM -- bin: 可执行文件 # run.py import os import sys BASE_DIR = os.path.dirname(os.path.d ...

  9. python --- 23 模块 os sys pickle json

    一.   os模块 主要是针对操作系统的 用于文件操作 二.    sys 模块 模块的查找路径   sys.path 三.pickle 模块 1.  pickle.dumps(对象) 序列化  把对 ...

随机推荐

  1. Snapdragon profiler

    这个debugger似乎看不了constant buffer 看不了memory but有个很神奇的功能 改shader直接在手机上显示结果 注意 需要unity build的时候勾 Script D ...

  2. http://blog.csdn.net/fbysss/article/details/8024748

    http://blog.csdn.net/fbysss/article/details/8024748

  3. 【Linux】pv vg lv, 加盘,扩容磁盘

    PV VG LV关系:一个物理盘(或一个lun)就是一个pv,有几个物理盘就有几个pv.一个或者几个硬盘可以组成一个vg,一个系统可以包括好几个vg,比如rootvg ,datavg等 PV组成VG, ...

  4. 2017.12.07 postgresql使用with recursive完成迭代查询

    1.表结构 2.需求 查询某条记录的所有父亲节点,或者所有孩子节点. 3.向上查询(查询所有父亲节点) 注意,这里返回的记录包含自己. sql如下: WITH RECURSIVE res AS ( S ...

  5. ITIL是什么

    ITIL是什么 ITIL&CMDB 番外: ITIL&互联网 ITIL是什么 ITIL即IT基础架构库(Information Technology Infrastructure Li ...

  6. 踩坑记:httpComponents 的 EntityUtils

    今天写的一个服务程序,有人报告获得的数据中文乱码,而我是用 apache 通过 httpComponents 去取得数据的.于是开启日志的 debug 级别. 在日志里果然发现中文不见了,有乱码出现: ...

  7. iOS适配整理

    iOS12适配问题 1.StatusBar内部结构改变 现象:crash crash log: -[_UIStatusBarIdentifier isEqualToString:]: unrecogn ...

  8. 关于Java异常java.lang.OutOfMemoryError: PermGen space

    内容来源: http://blog.csdn.net/fengyie007/article/details/1780375 PermGen space的全称是Permanent Generation ...

  9. Linux下使用Fastboot给手机刷ROM

    前言 一直在刷机.失败.刷机.失败中,还好今天有个任务能够使用fastboot刷机.好开心,最终不用切换系统了.(话说好久没有写代码了,身为一个互联网程序猿,不写代码我easy紧张). 开发环境 Ub ...

  10. 集成ueditor工具

    摘要: 摘要: 版权声明:本文为博主原创文章,未经博主允许不得转载. UEditor 是百度的一套开源的在线HTML编辑器. 第一步:去官网看官网文档,了解这个工具如何使用以及下载,本人下载的是1.4 ...