学习17.内容# 1.序列化 # 2.os # 3.sys # # 4.摘要 # 5.collections

序列化

什么是序列化 -- json
lit = [1, 2, 3, 4, 5,]
_lit= str(lit)
print(_lit)
print(list(_lit))
print(eval(_lit))

import json

两组四个方法
1.dumps loads
2.dump load
lit = [1, 2, 3, 4, 5, ]

_lst = json.dumps(lit)
print(_lst,type(_lst))
lis = json.loads(_lst)
print(lis,type(_lst))

lit = {'A': 1, 'B': 2, 'C': 3, }
_lst = json.dumps(lit)
_lst = json.dumps(lit,ensure_ascii=False)
print(_lst, type(_lst))
lis = json.loads(_lst)
print(lis, type(_lst))

import json

lit = {'A': 1, 'B': 2, 'C': 3, }
lit = [1, 2, 3, 4, 5, 6]
f = open('info', 'a', encoding='utf-8')
json.dump(lit, f)
f.close()

f1 = open("info", 'r', encoding="utf-8")
for i in f1:
    i = json.loads(i)
    print(i)
f1.close()
dump:将对象转换(序列化)成字符串,写入文件
liad:
pickle 序列化--(python所有对象进行转换)
唯一的区别是转换成特殊符号
import pickle
def func():
    print(123)
lit = [1, 2, 3, 4, 5, 6]
_list= pickle.dumps(lit)
print(_list)
print(pickle.loads(func()))

什么是序列化 -- json
lit = [1,22,3,3,45]  # [1,22,3,3,45]
s_lst = str(lit)
print(s_lst,type(s_lst))
print(list(s_lst))
print(eval(s_lst))  # 禁止使用

import json
两组4个方法:
    1.dumps loads
            lit = [1,22,3,3,45]
            print(json.dumps(lit),type(json.dumps(lit)))
            str_lst = json.dumps(lit)
            lst = json.loads(str_lst)
            print(lst,type(lst))

            dumps 将对象转换(序列化)成字符串
            loads 将字符串转换(反序列化)成对象

            dic = {'username':'宝元'}
            str_dic = json.dumps(dic)  # 序列化
            str_dic = json.dumps(dic,ensure_ascii=False)  # ensure_ascii=False 关闭ascii码
            print(str_dic,type(str_dic))
            dic1 = json.loads(str_dic)  # 反序列化
            print(dic1,dic1["username"])

    2.dump load
            import json
            lit = [1,22,3,3,45]
            同时写多个内容 进行序列化
            lst = [1,2,3,4,56,]
            f = open("info","w",encoding="utf-8")
            f.write(json.dumps(lst) + "\n")
            f.write(json.dumps(lst) + "\n")
            f.write(json.dumps(lst) + "\n")
            f.write(json.dumps(lst) + "\n")
            f.write(json.dumps(lst) + "\n")
            f.close()

            dump: 将对象转换(序列化)成字符串,写入文件
            load: 将文件中字符串转换(反序列)成对象

            同时读多个内容进行反序列
            f1 = open("info","r",encoding="utf-8")
            for i in f1:
                l = json.loads(i)
                print(l)
            f1.close()

pickle 序列化 - nb(python所有对象进行转换)
python自带的(只有python可以用)
两组4个方法:
1. dumps loads
        import pickle

        lst = [12,3,4,5,768]
        t_list = pickle.dumps(lst) # 转换成类似字节
        print(t_list)
        print(pickle.loads(t_list)[-1])

        dic = {"user":"郭宝元"}
        t_list = pickle.dumps(dic) # 转换成类似字节
        print(t_list)
        print(pickle.loads(t_list))

        def func():
            print(111)

        import json
        fun = json.dumps(func)
        print(fun)

        fun = pickle.dumps(func)
        print(fun)
        pickle.loads(fun)()

2. dump  load
import pickle
dic = {"usern":"baoyuian"}
dic = {"usern":"宝元"}
pickle.dump(dic,open("info","wb"))
print(pickle.load(open("info","rb")))

import pickle
dic = {"user":"123"}
pickle.dump(dic,open("info","ab"))

import pickle
dic = {"1":2}
f = open("info","wb")
s = "\n".encode("utf-8")
f.write(pickle.dumps(dic)+ s)
f.write(pickle.dumps(dic)+ s)
f.write(pickle.dumps(dic)+ s)
f.close()

f1 = open("info","rb")
for i in f1:
    print(pickle.loads(i))

推荐使用json
  json是各种语言通用的
  pickle(python私有)
asdfasd

os

import sys
print(sys.platform)

os 模块 -- 程序员通过python向操作系统发送指令(与操作系统交互的接口)
os模块四组:
    1.工作目录
            import os
            print(os.getcwd()) # 当前工作路径  ***
            os.chdir("F:\s24\day06") # 路径切换
            print(os.curdir)  # 当前
            print(os.pardir)  # 父级

    2.文件夹
            import os
            os.mkdir("ttt") # 创建一个文件夹  ***
            os.rmdir("ttt") # 删除一个文件夹  ***
            os.makedirs("ttt/sss/ddd/ee")  # 递归创建文件夹     ***
            os.removedirs("ttt/sss/ddd/ee")  # 递归删除文件夹   ***
            print(os.listdir(r"F:\s24\day17"))  ***

    3.文件
            import os
            os.rename()  # 修改名字   ***
            os.remove("info") # 删除文件  ***

    4.路径
            import os
            print(os.path.abspath(r"01 今日内容.py"))  # 通过相对路径获取绝对路径  ***
            print(os.path.split(os.path.abspath(r"01 今日内容.py")))  #将路径以最后一个\切割(路径,文件名)
            print(os.path.dirname(r"F:\s24\day17\01 今日内容.py"))  # 获取路径 ***
            print(os.path.basename(r"F:\s24\day17\01 今日内容.py")) # 获取文件名 **
            print(os.path.exists(r"F:\s24\day17\01 今日内容.py"))  # 判断这个路径是否存在  ***
            print(os.path.isdir(r"F:\s24\day17"))     # 判断是不是路径  ***
            print(os.path.isfile(r"01 今日内容.py"))  # 判断是不是文件  ***
            print(os.path.isabs(r"F:\s24\day17\01 今日内容.py"))     # 判断是不是绝对路径
            print(os.path.join("D:\\\\","ttt","bbb"))                # 路径拼接 *****
            import time
            print(time.time())
            print(os.path.getatime(r"F:\s24\day17\04 序列化.py"))      # 最后的修改时间
            print(os.path.getctime(r"F:\s24\day17\04 序列化.py"))      # 最后的访问时间
            print(os.path.getmtime(r"F:\s24\day17\04 序列化.py"))      # 最后的访问时间
            print(os.path.getsize(r"F:\s24\day09"))                    # 获取当前文件的大小   ***

sys

sys -- 与python解释器交互的接口

import sys
if sys.argv[-1] == "alex":
    print("dsb")
else:
    print("李业dsb")

print(sys.argv[-1])  # *** 当前文件运行['F:/s24/day17/06 sys.py']

import sys
print(sys.exit(1))   #

import sys
print(sys.version)  # 获取解释器版本

import sys
print(sys.path)     # 添加自定义模块查找路径 *****

import sys
print(sys.platform)   # *** 区分操作系统然后进行相关逻辑操作

hashlib

hashlib 加密
加密和校验

alex:alex123
alex:23lw23jky321jh4gqyt1234gj8b7t  # 加密后
{"1234":23lw23jky321jh4gqyt1234gj8b7t}

md5,sha1,sha256,sha512
1.只要明文相同密文就是相同的
2.只要明文不相同密文就是不相同的
3.不能反逆(不能解密) -- md5中国人破解了

alex:alex123
alex:b75bd008d5fecb1f50cf026532e8ae67

print(len("b75bd008d5fecb1f50cf026532e8ae67"))

加密:
    1.加密的内容
    2.将要加密的内容转成字节

import hashlib
md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update("alex".encode("utf-8"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update("alex123".encode("gbk"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update("alex123".encode("shift-jis"))
print(md5.hexdigest())

import hashlib
sha1 = hashlib.sha256()
sha1.update("alex123".encode("utf-8"))
print(sha1.hexdigest())

md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())

最常用是的md5,平时加密的时候使用sha1

加盐

加固定盐
import hashlib
md5 = hashlib.md5("常鑫".encode("utf-8"))
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())

动态加盐

user = input("username:")
pwd = input("password")

import hashlib
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())

767db14ed07b245e24e10785f9d28e29

f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest())

ss = "baoyuanalextaibai"
s = "baoyuan"
s1 = "alex"
s2 = "taibai"
import hashlib
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest())

md5 = hashlib.md5()
md5.update(s.encode("utf-8"))
md5.update(s1.encode("utf-8"))
md5.update(s2.encode("utf-8"))
print(md5.hexdigest())

节省内存

f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
while True:
    msg = f.read(1024)
    if msg:
        md5.update(msg)
    else:
        print(md5.hexdigest())
        break

collections

1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典

from collections import namedtuple,deque
Point = namedtuple('tu',["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
p = Point({"keu":(1,2,3,4)}, 20,10)
print(p)
tu = (1,2,32,34,4)
print(tu)

lst = deque([1,2,3,4,5,6,7])
lst.append(8)
lst.appendleft(0)
lst.pop()
lst.popleft()
print(lst[4])

队列:先进先出
栈:先进后出  --  栈顶

lst = [1,2,3,4]
lst.append(5)
lst.pop(0)

5.defaultdict: 带有默认值的字典
from collections import defaultdict
dic = defaultdict(list)
dic["k1"].append(12)
print(dic)

li = [11,22,33,44,55,77,88,99,90]
result = {"key1":[],"key2":[]}
result = {}
for row in li:
    if row > 66:
        if 'key1' not in result:
            result['key1'] = []
        result['key1'].append(row)
    else:
        if 'key2' not in result:
            result['key2'] = []
        result['key2'].append(row)
print(result)

from collections import defaultdict
dic = defaultdict(set)
li = [11,22,33,44,55,77,88,99,90]
for i in li:
    if i > 66:
        dic["k1"].add(i)
    else:
        dic["k2"].add(i)
print(dic)

from collections import Counter
s = "1112233344aaa"
s = [1,1,2,2,3,3]
s = (1,2,3,3,4,5,6,7,78)
print(dict(Counter(s)))  # ***
统计元素出现的次数

原文地址:https://www.cnblogs.com/changxin7/p/11252139.html

时间: 2024-07-30 16:18:36

学习17.内容# 1.序列化 # 2.os # 3.sys # # 4.摘要 # 5.collections的相关文章

Python学习第38天(文件处理,os、sys、pickle模块复习)

今天部分的内容会写的比较随意,想到需要复习的知识我就会进行一下演示,这样便于尽快把欠下的课程选择部分和即将要开始的ftp实现任务尽快完成. 一.文件处理部分 打开文件的一个固定格式:文件句柄 = open('文件路径', '模式') 模式有以下: 1. 打开文件的模式有(默认为文本模式): r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] a, 之追加写模式[不可读:不存在则创建:存在则只追加内容] 2. 对于非文本文件,我们只能使

ExtJS4.2学习(17)表单基本输入控件Ext.form.Field

Ext.form.Field是所有表单输入控件的基类,其他的输入控件都是基于Ext.form.Field扩展得来的. Ext.form.Field中定义了输入控件通用的属性和功能函数,这些通用的属性和功能函数大致分为3大类:页面显示样式.控件参数配置和数据有效性检验.我们先来看看表单输入控件可以使用的校验显示方式.默认情况下,这些输入控件会监听blur事件,如果数据校验失败,就会根据msgTarget中的设置显示错误信息.通常,msgTarget会被设置为qtip,即使用QuickTip显示错误

linux 网络编程需要学习的内容

Linux C++培训发 课程模块 Linux C++全科班课程由以下模块组成: Module01 - Linux系统基础 由于本系列课程基于Linux(或UNIX),熟悉Linux操作系统是必要的前提. 该模块的课程包含以下方面的内容: 常用Unix/Linux命令熟悉文件管理.文本处理.进程管理.网络.系统管理等各个方面大约100个常用的命令. 深入了解bash了解Linux默认shell: bash 的语法.命令执行.I/O重定向.任务控制等. 正则表达式基础由于UNIX/Linux中很多

Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容

一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件访问类似,都是共享应用程序数据,不同的是之前的两种文件格式可能完全不同,如可能为xml,txt,sql等等,这里ContentProvider返回的数据格式是统一的,因此应用的更为广泛一点. 二.实例 这里使用的是A应用通过ContentProvider共享数据给B应用.这里A应用用的是前文中的an

Android学习笔记-----------内容提供者

Android学习笔记-----------内容提供者 简介 内容提供者主要用于在不同的程序之间实现数据共享的功能;一个程序想要访问其他程序种由内容提供者提供的数据,必须依赖于contentresolver这个类的实例,可以通过getContentResolver()这个方法来获取这个类的实例;这个类提供有query(),insert(),update(),delete()等方法来操作数据这些方法都需要提供个Uri类型的参数,这个Uri对应的就是你需要操作的数据引用.一个uri主要由以以下几个部

ndk学习17: jni之Java调用C&C++

一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah -jni 包名.类名 在根目录下生成: org_bing_testjni_MainActivity.h 3. 工程中添加jni代码 工程右键->添加native code->输入名字->finish 多了如下文 新建一个Application.mk,配置相关选项(详细查看ndk有关Appl

0811 iOS开发需要学习哪些内容

1.iOS开发需要学习哪些内容? 2.开发步骤 3.框架 为了方便开发者开发出强大的功能,苹果提供了各种各样的框架 [1]UIKit:创建和管理应用程序的用户界面 [2]QuartzCore:提供动画特效以及通过硬件进行渲染的能力 [3]CoreGraphics:提供2D绘制的基于C的API [4]CoreLocation:使用GPS和WIFI获取位置信息 [5]MapKit:为应用程序提供内嵌地图的接口 [6]AVFoundation:音频.视频处理 [7]--

01_Hadoop学习笔记内容说明

Hadoop学习笔记内容说明_00 1.  观看云帆大数据梦琪老师的<企业级 Hadoop 1.x 应用开发基础课程>2014年4月左右版本. 2.  博客是在梦琪老师的随堂笔记上改动的,方便的是自己以后回顾学习,也或许能给需要改方面帮助的同行提供些许帮助,在此非常感谢梦琪老师. 3.  本系列是在CentOS6.4+hadoop1.2.1上实验通过的. 4.  由于本人刚刚接触,对Linux也只是初步了解,实验过程中遇到比较奇葩的问题,也在此博客写出. 5.  云帆大数据官网公布了一些公开的

爬虫学习 17.基于scrapy-redis两种形式的分布式爬虫

爬虫学习 17.基于scrapy-redis两种形式的分布式爬虫 redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器) 其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道) 2.基于scrapy-redis组件的分布式爬虫 ? - scrapy-re