Python基础_Day11

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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销: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.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目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公式展示 Γ ( n ) = ( n 1 ) ! n N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ ( z ) = 0 t z 1 e t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_42076261/article/details/88421411