WED.文件操作补充及函数
tell
- tell() : 告诉你指针位置, 打印输出为文件指针距离文件开头的位置
seek
-
seek()
f.seek(字节个数, 0) f.seek(字节个数, 1) f.seek(字节个数, 2) # 只有 0 模式可以在't'模式下使用,其中 1 和 2 只能在'b'模式下使用,但无论是't'还是'b',移动的都是字节个数
文件修改的原理: 将硬盘中的数据提取到内存,进行修改之后再将硬盘中的原数据进行覆盖
with open('a.txt', mode='rt', encoding='utf8') as f:
data = f.read()
with open('a.txt', mode='wt', encoding='utf8') as f:
f.write(data.replace('egon', 'EGON'))
如果文件过大,占用内存过高,内存容易溢出,影响计算机运行,文本编辑器就是该原理
import os
with open('a.txt', mode='rt', encoding='utf8') as f1,\
open('.txt.txt.swp', mode='wt', encoding='utf8') as f2:
for line in f1:
f2.write(line.replace('egon', 'EGON'))
os.remove('a.txt')
os.rename('.txt.txt.swp', 'a.txt')
某一时刻,会同时出现连个相同大小的文件,如果文件过大,需要硬盘留出足够的空间,不然无法运行
函数
-
什么是函数
- 函数就是盛放功能(一系列代码)的容器,定义函数就是造出了一个工具
- 事先准备工具的过程 --> 函数的定义
- 遇到应用场景拿来就用 --> 函数的调用
- func = 函数的内存地址
- 定义函数和定义变量是同一类
-
为何要用函数
- 避免程序组织结构不清晰,可读性差,可维护性差,可扩展性差
-
如何用函数
- 原则:先定义后调用
-
函数的语法
def 函数名(参数 1, 参数 2, 参数 3,...): """文档注释""" 代码 1 代码 2 代码 3 ... return 必须是一个值
-
调用函数
- 函数名(值 1, 值 2, 值 3)
-
函数定义阶段发生的事
- 申请内存空间,把函数体代码放进去,然后把内存地址绑定给函数名
- 函数在定义阶段只检测语法,不执行代码,只有在函数调用阶段才执行代码
-
函数的返回值
- 根据函数运行的结果是否需要进行进一步的操作来决定是否需要返回值
- 函数内可以有多个 return,但只执行第一个,并且将 return 后的值当做本次调用的返回值
-
函数返回值的三种形式
- return 值: 返回的就是该值本身
- return 值 1, 值 2, 值 3: 返回的是小元组
- return: 直接返回空值,且结束当前函数运行
-
模块
- 一系列功能的集合体
- 有以下四种通用类别:
- 用 python 编写的.py 文件
- 已被编译为共享库或 DLL的 C 或 C++扩展
- 把一系列模块组织到一起的文件夹(注: 文件夹下有一个__init__.py 文件,该文件夹称之为包)
- 使用 C 编写并链接到 python 解释器的内置快
- 模块的三种来源:
- python 在带的模块/库
- 内置模块
- 标准库
- 第三方库
- 自定义库
- python 在带的模块/库
-
为何要用模块
- 拿来主义,提升开发效率
- 减少代码冗余
-
如何用模块
- import
- from…import
-
模块示例
1. import time 时间戳 time.time 格式化的字符 time.strftime 结构化的时间 time.localtime/gmtime 2. import random 随机小数(0, 1) random.random 随机整数 random.randint 随机整数(顾头不顾尾) random.randrange