1.文件操作
在程序中对文件内容进行操作: 包含从文件中读取内容 和 写入内容
1.文件的读写
1.在程序中打开文件 生成操作文件的手柄 并且建立文件和程序之间的通道
这个手柄可以操作文件内容
注意:
程序无法处理程序之外产生的垃圾 由于文件对于程序而言属于外部资源 如果产生垃圾的话 程序无法处理
所以当操作完文件之后 需要手动将通道进行关闭
'''
第一个参数放置的是文件路径
第二个参数 打开文件的模式:
r --- 只读 如果文件不存在 报错
w --- 只写 如果进行读的行为就会报错 文件不存在 创建 文件存在 清除文件中的原内容
a --- 与w类似 区别: 如果文件存在 不会清除原内容 而是进行追加
rb --- 与字节数据打交道
wb --- 写入文件中的必须是字节数据
ab ---
r+ --- 操作可读可写
w+
a+
rb+
wb+
ab+
带有b的是通过字节数据与文件打交道 不带的是通过字符数据进行交互
'''
# 注意: 如果以字节的格式进行文件操作不需要设置enconding编码---># ValueError: binary mode doesn't take an encoding argument
handle = open("test.txt", "rb", encoding="utf-8") # 错误的
# 如果文件进行读写得到时候 提示文件中隐藏字节数据 无法进行编码 采用字节格式来进行读取
handle = open("test.txt", "rb")
# encoding的传值 读取的文件是什么编码方式 encoding就传递对应的数据
handle = open("main.txt", "r", encoding="utf-8")
读的操作
读的方式:
read(size)
如果不给size传值的话 相当于要把文件所有数据一次性全部读取
readline()
读取一行
readlines()
读取多行
# 如果不传值一次性读取
data = handle.read()
print(data)
# 如果以字节数据进行读取 传递的参数代表的是读取的字节数
# 如果以非字节形式进行读取 传递的参数表示的字符数
data = handle.read(3)
print(data)
# 读取完成之后 再进行读取的话 会原来的基础进行读取
data = handle.read(5)
print(data)
# 对数据进行解码
res = data.decode("utf-8")
print(res)
# 第二种读取方式: 一行一行进行读取
res = handle.readline()
print(res)
# 读取所有行 返回的是列表 用于存放所有行的数据
res = handle.readlines()
print(res)
# 字节读取的方式 查看数据的内容
data_list = [item.decode("utf-8") for item in res]
print(data_list)
# 关闭通道
handle.close()
# 非文本文档读取的时候使用字节格式进行读取
import os
path = r"C:\Users\11143\Documents\讲课内容\BJ_Python1811\day10\video\4.装饰器.mp4"
handle = open(path, "rb")
'''
文件数据太大 之后操作分批进行读取
需要: 读到什么时候就不用再去读取?
可以根据文件大小 作为判定条件进行循环判断
'''
# 获得文件大小
file_size = os.path.getsize(path)
# 设置一个变量 记录每次读取的数据的字节数
has_read = 0
# 设置每次读取数据的大小 一般设置为1024B
read_size = 1024
while has_read < file_size:
data = handle.read(read_size)
print(data)
has_read += read_size
handle.close()
写的操作
写的方式:
write(内容)
如果以非字节形式打开文件的话 写入的就是字符串
否则 写入的是字节数据
writelines(写入列表) ---> 与readlines()是对应的
handle = open("main.txt", "a")
handle.write("good good study\n")
handle.writelines(["day day up\n", "hello nice to meet you"])
handle.close()
handle = open("main.txt", "wb")
handle.write("good good study\n".encode("utf-8"))
handle.writelines(["day day up\n".encode("utf-8"), "hello nice to meet you".encode("utf-8")])
handle.close()
案例:文件复制
'''
打开源文件
进行读的操作
分批读取
打开目的文件
进行的写的操作
读一部分 写一部分
'''
import os
src_path = r"C:\Users\11143\Desktop\男.jpg"
desc_path = r"image.jpg"
# 获得源文件的大小
file_size = os.path.getsize(src_path)
# 设置变量 累加每次读取的字节数
has_read = 0
read_handle = open(src_path, "rb")
# 只要不执行这一句 源文件的内容就不会清空
write_handle = open(desc_path, "wb")
while has_read < file_size:
data = read_handle.read(1024)
write_handle.write(data) # 写出去
write_handle.flush() # 将数据刷新到文件中
has_read += 1024
read_handle.close()
write_handle.close()
2.数据持久化 —>永久的存放数据
模块:pickle
# 向文件中存储程序中的数据
import pickle
'''
参数:1.存储的数据
2.存储到指定文件的路径
写入和读取的时候都是采用的[字节数据]的格式
'''
handle = open("data.txt", "wb")
pickle.dump([12, 34, 56], handle)
handle.close()
handle = open("data.txt", "rb")
data = pickle.load(handle) # 读取出来
print(data)
handle.close()
with open("data.txt", "wb") as handle:
pickle.dump({"语文":77, "数学":99}, handle)
with open("data.txt", "rb") as handle:
data = pickle.load(handle)
print(data)
3.with语句:
使用这种语句来操作文件 可以省略掉手动关闭的操作
使用with操作完文件之后 通道会自动关闭
2.面向对象
面向过程 和 面向对象 这两个都是编程思想
面向过程编程思想的思维:
分析完成功能需要哪些步骤 根据步骤一步一步去执行对应的内容
写万年历的时候
判定年月
获得天数
获取星期数
根据条件规律 把日历打印出来
面向对象的编程思想的思维:
分析谁(具有对应功能的对象)可以完成这个内容 ---> 就让谁去完成需求
生活中的实例:
吃饭:
面向过程:
买菜
洗菜
切菜
炒菜
吃菜
面向对象:
借助饭店
大爷 --- 买菜
小姐姐 --- 摘菜 洗菜
厨师 --- 切菜 炒菜
工作:
工作流程
产品经理 确定项目需求 设计出来原型图
整个项目开发团队 由产品经理 开会给大家确定需求
后台人员就可以根据需求进行功能开发
UI设计人员 根据产品经理的原型图 出设计图
前端开发人员 对比原型图和设计图 查看是否有设计图中是否有功能遗漏
前端人员根据UI设计人员提供的资料进行界面的搭建
前端人员与后台人员调节接口数据
提交给测试人员 根据原型图 设计图 对比查看功能bug和界面bug
项目在服务器上提交 项目就可以对外开放了
总结:
面向过程的程序:
把程序是做一系列函数(命令)的集合 需要的时候按照顺序流程执行功能
面向对象的程序:
把程序视作一组对象的集合 每个对象之间进行数据的传递 进而完成功能的需求
Python中所有数据统称为对象
a = 10
a = "abc"
list0 = list()
list1 = []
不同的数据 对象的类型是不一样的
数据的类型:
Python提供的系统类型 和 自定义的数据类型
类型:
整型 12 13 45 34 56
字符串类型 "abc" "hello"
类型就是一类事物 这类事物具有相同的特征
自定义数据类型: 找具有共同特征的事物 统称为一种类型
学生类型:
在程序中自定义数据类型的格式:
class 类型的名字:
该类型中事物的特征
在程序中使用的类型具体数据 —> 称之为对象
类和对象的关系:
对象是类型的具体的某个实例
类是对象的抽象描述[对象的特征给描述出来]
根据类型创建出对象某个实例[对象]
类型名()--->对象
3.成员变量和局部变量
成员变量 —>对象的属性 self.后面的字段名
局部变量 —>在函数内部声明的变量[包含形参]
局部变量:
随着函数的调用在内存中是存放于栈中的
消失的时间: 随着函数执行完成而立即被销毁
成员变量:
跟随者对象存放于堆中 每个对象都有自己的特征属性
消失时间:当该对象被垃圾回收机制销毁时 该对象的成员变量销毁
堆中的内存管理: 采用的是引用计数管理方式
当有一个变量通过地址指向对象时 该对象引用计数+1
对象销毁时机 当该引用计数为0时 对象会被标记上垃圾的标识 等待着垃圾回收机制进行回收
4.构造方法和析构方法
构造方法:
创建对象 为对象进行特征初始赋值的
__init__
析构方法
对象在内存中被销毁的时候调用的
__del__
去除掉对象引用计数的方式:
引用变量 = None
del 引用变量 ---> 删除变量 再使用的时候类似于变量名没有被声明过
5.如何在需求中提取对象 根据对象特征声明对应的类型
提取方式:
名词提炼法 ---> 凡是名词提取出为对象
案例:
小明在森林公园遛旺财
分析:
小明 --- 人类
特征:
名字
行为:
遛(东西, 地点)
森林公园 --- 公园类
名字
旺财 --- 狗类
名字
练习
菜菜穿着特步运动鞋在奥林匹克公园跑步
菜菜
特征:
名字
鞋
行为
跑步(地点)
奥林匹克公园
特征: 名字
鞋
特征:
品牌
种类
6.特殊对象
员工类:
编号
姓名
性别
薪资
部门类
部门编号
部门名字
员工列表
当一个类A中需要其他类型多个对象时 可以将类A中对应的这个属性使用容器来表示
这里写自定义目录标题
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to- HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎