补充内容:

解决模块循环导入的两种方法:(不得已而为之,表示程序结构不够严谨)

  1. 将导入模块语句放在文件最下方 保证语句导入之前函数内代码能够被执行

  2. 将导入语句放进函数体内 使其不影响整个函数的运行


1.什么是包

  • 包是一种管理python模块命名空间的形式,采用‘点模块名称’的导入方式

    比如一个模块的名称是A.B,那么它表示一个包A中子模块B

  • 包就是一个含有__ init__.py文件的文件夹

    __ init __ .py : 导入包就是导__ init __

2.为什么要用包

  • 包的本质就是一个文件夹,用来对内部模块进行组织管理,从而达到提高程序的结构性和可维护性。

3.如何用包

  • 包的导入

    • 绝对导入

      以执行文件路径为准,在执行文件中添加包所在的模块(文件夹)路径,然后就可以在__ init __.py中添加导入语句

      # 执行文件
      import sys
      sys.path.append(r'包与执行文件共同所在文件夹路径')

      import 包名

      包名.函数名()
      .
      .
      . # 包下的__ init _.py文件(存放调用命令)
      from 包名.文件名…… import 函数名……
      ……
       
    • 相对导入(仅限于包内文件相互引用)

      from . import 函数名、……

      '.':表示当前文件所在文件夹,再加一个点'.'则表示上一级文件夹,依次往上,不能超出包。

      注意:绝对导入是通用的,相对导入只能在包内使用


内置模块

1.json与pickle模块

  • 解决序列化的问题(Json:字符串;pickle:bytes)

  • 什么是序列化

    序列化就是将内存中的数据类型转成另一种格式

    即:

    ​ 序列化:字典————序列化————其他格式————存到硬盘

    ​ 反序列化:硬盘————读取————读取——其他格式————反序列化————字典

  • 为什么要序列化

    1. 将程序运行的数据序列化后永久保存到硬盘

    2. 数据的跨平台交互

    • 如何序列化

      • Json:

        优点:这种格式是一种通用格式,所有的编程语言都能识别

        缺点:不能识别所有python类型

        强调:json格式只有双引号,不能识别单引号

        • json.dumps:将 Python 对象编码成 JSON 字符串,序列化

        • json.loads:将已编码的 JSON 字符串解码为 Python 对象,反序列化

      

    • import json

      dic1 = {'k1': 'value', 'k2': 'v2', 'k3': 'v3', 'k4': '你好啊'}
      dic_j = json.dumps(dic1) # 序列化

      with open(r'js.json', 'w', encoding='utf-8') as f1:
      json.dump(dic1, f1) # 序列化+持久化(即保存下来)


      with open('js.json', mode='rt', encoding='utf-8') as f:
      dic_j=f.read() # 将文件读到内存
      dic2 = json.loads(dic_j) # 在内存中反序列化

      with open(r'js.json', 'r', encoding='utf-8') as f:
      print(json.load(f)) # 直接在文件中反序列化 # dumps和loads方法都在内存中转换,dump和load的方法会多一个步骤,dump是把序列化后的字符串写到一个文件中,而load是从一个一个文件中读取文件

        json将中文转为Unicode16进制

    • pickle

      优点:能识别所有python类型

      缺点:只能别python这种编程语言识别

      序列化:pickle.dumps() \ pickle.dump

      反序列化:pickle.loads \ pickle.load

      # dumps
      dic_pkl=pickle.dumps({1,2,3,4}) # 序列化
      print(dic_pkl)

      with open('b.pkl',mode='wb') as f: # 注意文件模式为B模式
      f.write(dic_pkl) # 保存(持久化) # dump
      with open('c.pkl',mode='wb') as f:
      pickle.dump(dic,f) # 序列化写入文件 # loads
      with open('b.pkl',mode='rb') as f:
      s_pkl=f.read() # 读取到内存
      s=pickle.loads(s_pkl) # 反序列化
      print(type(s)) # load
      with open('c.pkl',mode='rb') as f:
      dic=pickle.load(f) # 在文件中反序列化
      print(dic,type(dic))

2.time & date time

  • time

    时间分为三种格式

  1. 时间戳(从1970.1.1 00:00到当前的时间秒数)

    print(time.time())

  2. 格式化的字符串时间表

    print(time.strftime('%Y-%m-%d %H:%M:%S %p')) # 得到年-月-日 时-分-秒 上下午

  3. 结构化的时间

    print(time.localtime()) # 展示时间

    print(time.localtime().tm_mday) # 展示month day 今天是这个月的第几天

  1. 时间的转换

 

 

  • data time  

#时间加减
import datetime

print(datetime.datetime.now()) # 返回当前时间 print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2018-12-05
print(datetime.datetime.now() )
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

c_time = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #时间替换,替换当前时间的时和分比如2018-12-05 19:00:00 pm替换为2018-12-05 02:03:00 pm

3.random 模块(随机数)

import random

print(random.random())  # 大于0且小于1之间的小数

print(random.randint(1,3))  #[1,3]大于等于1且小于等于3之间的整数

print(random.randrange(1,3)) #[1,3)大于等于1且小于3之间的整数

print(random.choice([1,'',[4,5]]))  #1或者23或者[4,5]

print(random.sample([1,'',[4,5]],2))  #列表元素任意2个组合

print(random.uniform(1,3))  #大于1小于3的小数,如1.927109612082716 

item=[1,3,5,7,9]
random.shuffle(item) # 随机打乱item的顺序,相当于"洗牌"
print(item)
# 编写一个随机验证码生成器,要求验证码由字母与数字组成

import random

def test(digit_size): # digit_size 自定义验证码位数
res = ''
for i in range(digit_size):
num = str(random.randint(0, 9)) # 随机数字
u_alp = chr(random.randint(65, 90)) # 随机大写字母,chr(ASCII小写字符对应数字)
l_alp = chr(random.randint(97, 122)) # 随机小写字母
res += random.choice([num, u_alp, l_alp]) # 随机三种格式之一,并实现字符串的拼接
return res

i_digit_size = input('请输入随机验证码位数:')
print(test(i_digit_size))

Python包,json&pickle,time&datetime,random模块的更多相关文章

  1. Day13 Python基础之time/datetime/random模块一(十一)

    time模块 import time print(help(time)) time.time() #return current time in seconds since the Epoch as ...

  2. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  3. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  4. Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块

    json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...

  5. Python常用模块time & datetime &random 模块

    时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...

  6. python基础--json,pickle和shelve模块

    一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换  字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...

  7. python 序列化 json pickle

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  8. python之json&pickle

    用于序列化的两个模块: json:用于字符串和python数类型间进行转换 oickle:用于python特有的类型和python的数据类型间进行转换 json.pickle模块提供四个功能:dump ...

  9. 【python】-- json & pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess

    json & pickle Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] ...

  10. Python知识点入门笔记——Python文件操作、异常处理及random模块使用

    文件是存储在外部介质的数据集合,通常可以长久保存,前提是介质不易损坏 Python的绝对路径写法: E:\\编程学习资料\\爬取某社区高清无码大图.py E:/编程学习资料/爬取某社区高清无码大图.p ...

随机推荐

  1. 牛客寒假5-D.炫酷路途

    链接:https://ac.nowcoder.com/acm/contest/331/D 题意: 小希现在要从寝室赶到机房,路途可以按距离分为N段,第i个和i+1个是直接相连的,只需要一秒钟就可以相互 ...

  2. Points on Plane Codeforces - 576C

    https://www.luogu.org/problemnew/show/CF576C 看题面,一眼按莫队的方法排一下 直接交就会和我一样发现WA掉了... 算一下会发现,上限是3e9(块内左端点1 ...

  3. java中的线程安全是什么?什么叫线程安全?什么叫不安全?

    java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫 ...

  4. laravel 5.5 oauth2.0 跨域问题解决方案

    一.laravel-Cors 安装 在终端执行安装命令如下: composer require barryvdh/laravel-cors 添加服务提供商 在Laravel配置文件app.php的pr ...

  5. 本机运行x程序出现:Can't open display 原因及其解决方法(貌似非永久)

    http://blog.sina.com.cn/s/blog_53db572501016ma7.html 这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的 ...

  6. AJAX的JSON方式传回方法

    AJAX返回数据的类型有两种,一种是TEXT类型,一种是JSON类型. 使用TEXT类型,访问数据库后将结果拼接成字符串,返回时在拆分成数组使用. JSON直接将结果转成JSON数据,返回时直接使用. ...

  7. css选择器(基础)

    CSS选择器:     一个样式的语法是由选择器+属性+属性值三部分组成: 到底什么是选择器呢? 答:个人直白的理解为:选择一种要对它进行操作的标签的方法就叫做选择器.也就是说选择器就是一种选择元素的 ...

  8. vue从入门到开发--1-安装脚手架

    一: 1.在文件目录下打开命令窗口(按住shift+右键[在此处打开命令窗口]或者直接ctrl+R打开命令窗口,利用cd选择到自己的文件目录) 2.$ npm install --global vue ...

  9. 原来MFC窗口样式随字符集而改变

    以前好像发现,MFC窗口上按钮的自动样式有时是有亮色边框3D效果的,有时没有,不知道原因,也没有追究,今天正好有机会发现了原因,原来是随字符集而改变的. 1.Unicode版本下的窗口 2.未设置的窗 ...

  10. 解析没有key的Json

    没有key的Json,例如:["http://www.cnblogs.com/Cherry-B/p/4625133.html","http://www.cnblogs.c ...