复习

1.判断py文件的两种用途
提到判断__name__ == '__main__'时,会执行py文件,
直接输入main,在pycharm里按tab直接自动输入这条语句 2.解决模块相互导入的问题:
在说之前,要知道文件的互相导入,是目录结构设计的不够合理,应该尽量调整程序结构并避免
run.py
import m1
m1.fun1() m2.py
print('正在导入m2')
from m1 import x
y='m2' m1.py
print('正在导入m1')
from m2 import y
print('来自m2的y:',y)
x='m1' 上面的run.py文件运行时会报错,报错的地方在m2中的from m1 import x,因为x还未定义就跳转到m2文件中去了,所以,这时候内存中还没有x,会报错 把函数内的定义放在导入的前面,这样可以先创建好自己的名称空间,方便互相导入,或者把导入放在函数中写,这样调用函数的时候才会导入模块 调整后的m1.py
def func1():
from m2 import y,func2
print('来自于m2的y:',y)
func2()
x = 'm1' 调整后的m2.py
def func2():
from m1 import x
print('来自m1的x:',x)
y = 'm2'
这样定义好后,运行run.py会把两个模块的名称空间都创建好了,方便后续的使用

今日内容

1. 包

1. 什么是包
包就是一个含有__init__.py文件的文件夹,导包就相当于在导入init文件
包里的所有内容没有右键运行一说
2. 导入都以包的顶级目录往下找
3. 绝对导入
相对导入:(仅限在包内使用)
.加要用的模块名

2. json&pickle (*****) (为了解决序列化问题)

不要把自己定义的文件名命名为json或者pickle
1. 什么是序列化
序列化就是将内存中的数据类型转成另外一种格式
即:
序列化:字典------序列化----->其他格式-------->存到硬盘
硬盘---读取------>其他格式------反序列化------>字典
2. 为什么要序列化
1. 持久保存程序的运行状态
2. 数据的跨平台交互 3.如何序列化 json:(以后常用的是json,为了程序的跨平台性)
优点:这种格式是一种通用的格式,所有编程语言都能识别 缺点:不能识别所有python的数据类型
强调:json内没有单引号 用法:
1.json.dumps和json.dump
import json
dic = {'k1':True,'k2':10,'k3':'egon','k4':'你好啊'}
dic_pkl = json.dumps(dic) # 序列化
with open('1.json',mode='wt',encoding='utf8') as f:
f.write(dic_pkl) # 持久化 以上语句可以一步做到,用json.dump直接序列化+持久化
with open(1.json,mode='wt',encoding='utf8') as f:
json.dump(dic,f) 2.反序列化
1.json.loads和json.load
import json
with open('1.json',mode = 'rt',encoding = 'utf8') as f:
dic_json = f.read()
dic = dic_json.loads(dic_json) 反序列化
print(dic) 以上语句也可以用一步做到,json.laod()
with open('1.json',mode = 'rt',encoding = 'utf8') as f:
dic = json.load(f)
print(dic['k1'])

pickle
优点:能识别所有python类型
缺点:职能被python这门编程语言识别 用法,pickle的用法和json的用法一模一样
dic={'k1':True,'k2':10,'k3':'egon','k4':'你好啊'}
1.pickle.dumps与pickle.dump
dic_pkl=pickle.dumps(dic)
with open('1.pickle',mode = 'wb') as f:
f.write(dic_pkl) 用dump代替
with open('1.pickle',mode = 'wb') as f:
pickle.dump(dic,f) 2.pickle的loads,load
with open('1.pickle',mode = 'rb') as f:
dic_pkl=f.read()
dic = pickle.loads(dic_pkl) 用laod代替
with open('1.pickle',mode = 'rb') as f:
dic = pickle.load(f)
print(dic)

3.time&datetime模块

http://www.cnblogs.com/linhaifeng/articles/6384466.html
时间分为三种格式:
1.时间戳:1970年1月1号到今天经过的秒数
import time
time.time()
2. 格式化的字符
print(time.strftime('%Y-%m-%d %H:%M:%S %p'))
3.结构化的时间对象
time.localtime() 得到本地时间的结构化时间对象
time.localtime().tm_hour 只获取小时
time.localtime().tm_wday 获取是本月的第几周
time.localtime().tm_yday 获取本年的第几天 只获取小时只获取小时东八区的中国时间
time.gmtime() 格林威治时间 4. 时间转换
时间戳---->struct time ------>格式化的字符串
struct_time = time.localtime(123123123) 时间戳转struct time
print(struct_time)
print(time.strftime('%Y-%m-%d',struct_time))转成字符串 格式化的字符串----->struct_time----->时间戳
struct_time= time.strptime('2017-03-11','%Y-%m-%d')
print(struct_time)
print(time.mktime(struct_time)) time模块的问题:
1.格式化时间的获取比较麻烦
2.时间转换不方便
3.时间的计算太麻烦 datatime解决了以上问题
datetime.datetime.now() # 获取当前本地时间的格式化时间对象
datetime.datetime.fromtimestamp(123123123) #从1970年1月1号往后多少秒后的时间转换成格式化时间对象
datetime.datetime.now()+datetime.timedelta(days = 3) # 当前本地时间加上三天后的时间,换算成格式化时间对象
datetime.datetime.now() + datetime.timedelta(days=3,hours = 3)

4. 随机模块

random() 随机取0到1之间的小数,不包含0和1
random.randint(1,3) [1,3] 取大于等于1,小于等于3的整数
random.randrange(1,3) [1,3) 取大于等于1小于3的整数
random.uniform(1,3) 取大于1小于3的小数
random.choice([1,'a','c']) 每次从里面选择一个
random.sample([1,'a','c'],2) 每次从列表里选择2个
item=[1,3,5,7,9]
random.shuffle(item) #给列表其中元素洗牌 小练习,生成一个网站的验证码
import random
def make_code(max_size = 6):
res = ''
for i in range(max_size):
num = random.randint(0,9)
alp = char(random.randint(65,90))
res = random.choice(num,alp) 其中chr(65) 把里面数字转成对应的ascii码表
make_code(10)

day16 包的使用 json time 常用模块的更多相关文章

  1. 第5课:内置函数、处理json、常用模块

    1. 内置函数 1)常用的内置函数 print(all([0, 2, 3, 4])) # False,判断可迭代的对象里面的值是否都为真 print(any([0, 1, 2, 3, 4])) # T ...

  2. day21-time与random等常用模块与包

    2018-08-05 # ********************day21-time与random等常用模块与包 ******************* # 参考资料# python模块(转自Yua ...

  3. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

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

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

  5. Python【第五篇】模块、包、常用模块

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

  6. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

  7. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  8. 模块与包&常用模块

    一.模块的使用 模块定义:一系列功能的集合体 分为三大类:1.自定义模块 2.内置模块(比如 time,os,sys) 3.第三方模块 模块的表现形式: 1.使用python编写的py文件 2.已被编 ...

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

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

随机推荐

  1. hadoop/etc/hadoop 下没有mapred-site.xml,只有mapred.xml.template

    默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapRedu ...

  2. 《算法》第四章部分程序 part 5

    ▶ 书中第四章部分程序,加上自己补充的代码,图的深度优先遍历 ● 无向图的广度优先遍历,有向 / 无向图代码仅若干方法名不同 package package01; import edu.princet ...

  3. HTTP协议之认证

    认证方式有: basic ntlm digest

  4. StorageLevel

    val NONE = new StorageLevel(false, false, false, false)  val DISK_ONLY = new StorageLevel(true, fals ...

  5. 3. powerdesigner 生成mysql脚本,要求字段、表名有注释

    1.字段注释设置 : 在 pdm 视图中,Database --> Edit Current DBMS. 找到 MySql5.0 --> Script --> Objects --& ...

  6. Ubuntu 下安装 Swoole

    环境:Ubuntu16.04 apt-get update apa-get install apache2 php php-pear php-dev mysql-server gcc apache2 ...

  7. JedisCluster操作redis集群

    1.pom引入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...

  8. 浅谈 CAS

    CAS: CAS:Compare and Swap, 翻译成比较并交换. java.util.concurrent包中借助CAS实现了区别于 synchronized 同步锁的一种乐观锁. CAS应用 ...

  9. WPF按钮响应函数中执行操作耗时较长时,UI 界面不能实时更新——问题原因与解决方案

    原因: 一般来说,一个WPF窗口程序,只有一个UI线程, 如果这个线程停在某个函数,UI将会被阻塞,所有其他的界面操作都不能即时响应. 解决方案: 新开一个线程来执行耗时较长的操作,以不阻塞UI.

  10. 18_使用react脚手架构建应用

    一.什么是脚手架 1.脚手架:用来帮助程序员快速创建一个基于xxx项目的模板仓库(可以理解为网上的大神写好了基础模板直接下载无需自己配置) 1)包含了所有需要的配置 2)指定好了所有依赖 3)可以直接 ...