python基础篇 -- day14、15

模块

系统模块

常用标准库:

标准库说明
builtins内建函数默认加载
math数学库
random生成随机数
time时间
datetime日期和时间
calendar日历
hashlib加密算法
copy拷贝
functools常用的工具
os操作系统接口
re字符串正则匹配
sysPython自身的运行环境
multiprocessing多进程
threading多线程
json编码和解码 JSON 对象
logging记录日志,调试

自定义模块

导入模块

import XXX(模块名)
模块名.变量
模块名.函数名()
模块名.类

from — import XXx
from 模块民

__ name__

文件夹 +__ init__.py —> 包
包里面存放多个模块

作用:

  1. 防止命名冲突
  2. 方便管理

导入:

  1. import 包名.模块名
  2. from 包名.模块名 import 具体的类、函数等

循环导入

包的结构
在这里插入图片描述

from pack2.moduel_b import testb1

def testa():
    print('---->testa start')
    # 调用module_b
    testb1()
    print('--->testa end')


if __name__ == '__main__':
    # 调用testa
    testa()
from pack1.moduel_a import testa

def testb1():
    print('----->pack2 module_b testb1')


def testb2():
    print('=====>testb2 start')

    # 使用到module_a
    testa()
    print('=====>testb2 end')

结果:

D:\python\python.exe D:/python-workspace/gp-python-day14/pack1/moduel_a.py
Traceback (most recent call last):
File “D:/python-workspace/gp-python-day14/pack1/moduel_a.py”, line 3, in < module>
from pack2.moduel_b import testb1
File “D:\python-workspace\gp-python-day14\pack2\moduel_b.py”, line 1, in < module>
from pack1.moduel_a import testa
File “D:\python-workspace\gp-python-day14\pack1\moduel_a.py”, line 3, in < module>
from pack2.moduel_b import testb1
ImportError: cannot import name ‘testb1’

避免循环导入
重构代码
将导入语句不放在最上面,放到函数里面(调用处)
将导入语句放在__ mian__里面

文件操作

文件:持久化数据
在原先的编程中数据存放在内存中(闪存),程序结束则数据全部销毁,无法保存。
open()

open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True)

file为文件的路径
encoding 编码格式,默认可能与编辑器的编码格式一致,中文应使用utf-8

mode用法
ropen for reading (default) 只读模式,文件不存在则会报错
w写模式,文件不存在则创建 ps:每次写入将会把原先文件中的数据清空
a追加模式,与w模式相似,但是不会清空内容,会继续在后面追加
b二进制模式,与r搭配,可以读一些照片等
+将两种模式加载到一块,r+b二进制读,r+w二进制写,可以省略不写

图片复制

file_path = r'C:\Users\running\Desktop\GPDay14(模块与文件)\图片\open.png'
with open(file_path, 'rb') as rstream:
    content = rstream.read()
    # 写入
    filename = file_path[file_path.rfind('\\') + 1:]
    with open(filename, 'wb') as wstream:
        wstream.write(content)


print('复制完成!')

表格处理

'''
文件不是一个图片,文本文件
表格:
    excel
    数据库导出 ---》 csv

'''
import csv


def write_csv(file_path):
    with open(file_path, 'w', newline='') as wstream:
        csv_writer = csv.writer(wstream)
        # 写东西
        csv_writer.writerow(['001', 'xiaohua', 19])
        csv_writer.writerow(['002', 'ergou', 20])
        csv_writer.writerow(['003', 'xiaoming', 19])


def dictwrite_csv(file_path):
    with open(file_path, 'w', newline='') as wstream:
        fieldnames = ['sno', 'sname', 'age']
        csv_writer = csv.DictWriter(wstream, fieldnames)
        # 写东西
        csv_writer.writeheader()
        csv_writer.writerow({'sno': '001', 'sname': 'xiaohua', 'age': 19})
        csv_writer.writerow({'sno': '002', 'sname': 'ergou', 'age': 22})
        csv_writer.writerow({'sno': '003', 'sname': 'xiaoming', 'age': 21})


# 读取文件
def csv_read():
    with open(file_path, 'r', newline='') as rstream:
        csv_reader = csv.reader(rstream)
        # 读取内容
        for row in csv_reader:
            print(row)


def dictcsv_read():
    with open(file_path, 'r', newline='') as rstream:
        csv_reader = csv.DictReader(rstream)
        # 读取内容
        for row in csv_reader:
            print(dict(row))


file_path = r'C:\Users\running\Desktop\GPDay15(文件与系统模块)\代码\users.csv'

# write_csv(file_path)
# dictwrite_csv(file_path)

dictcsv_read()

序列化

将对象转换为可通过网络传输或可以存储在本地磁盘的数据格式(如:xml、json等特殊格式)的过程叫做序列化;反之,称为反序列化

python的序列化实现:

json
序列化: dumps dump 加s针对于文件操作,没有太大差别
反序列化: loads load
pickle
pickle.dumps(dict1) —> 字节串
pickle.loads(bytes_object) ----> python 类型

dict1 = {'tianfengli': [{'sno': '001', 'sname': 'xiaohua', 'age': 18, 'status': False},
                        {'sno': '002', 'sname': 'egou', 'age': 20, 'status': True},
                        {'sno': '003', 'sname': 'xiaoming', 'age': 18, 'status': False}
                        ],
         'beike': [
             {'sno': '011', 'sname': 'xiaohua1', 'age': 18, 'status': False},
             {'sno': '012', 'sname': 'egou1', 'age': 20, 'status': True},
             {'sno': '013', 'sname': 'xiaoming1', 'age': 18, 'status': False}
         ]
         }

import pickle

result = pickle.dumps(dict1)
print(result)

r = pickle.loads(result)
print(r)


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return self.name


stu = Student('xiaohua', 20)
stu1 = Student('ergou', 19)
bobj = pickle.dumps(stu)
print(bobj)

stu = pickle.loads(bobj)
print(stu)

with open('stus.txt', 'wb') as ws:
    pickle.dump(stu, ws)
    pickle.dump(stu1, ws)

with open('stus.txt', 'rb') as rs:
    while True:
        try:
            content = pickle.load(rs)
            print(content)
        except:
            print('读取完毕!')
            break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只敲代码的大脸猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值