今日学习目标:
- 熟悉文件操作,理解和运用文件操作方法
- 理解函数定义
今日学习内容:
内容简要:
- 文件内光标的移动(了解)
- 文件数据修改(了解)
- 函数简介
- 函数的语法结构
内容详细:
文件内光标的移动(了解)
光标的移动
-
1.控制光标的移动
seek方法可以控制光标的移动 在文本模式下移动的单位也是字节数
语法结构:
- seek(offset,whence)
offset:控制移动的字节数
whence:控制模式
- whence:控制模式
0:相对于文件开头(让光标先移动到文件开头)
*支持文本模式和二进制模式*
1:相对于当前位置(让光标先停留在当前位置)
*只支持二进制模式*
2:相对于文件结尾(让光标先移动到文件末尾)
*只支持二进制模式*
举例:
with open(r'a.txt', 'r', encoding='utf8') as f: print(f.read()) f.seek(3, 0) print(f.read())
运行结果:
- seek(offset,whence)
文件数据修改(了解)
文件对应的是硬盘空间,硬盘不能修改对应着文件本质也不能修改,
那我们看到文件的内容可以修改,是如何实现的呢?
大致的思路是将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘
举例:
文件a.txt改变前内容如下
张三 男 28 12344234523
李四 女 23 13913453521
代码:
with open('a.txt',mode='r+t',encoding='utf-8') as f:
f.seek(6)
f.write('<已婚>')
运行结果:
张三<已婚> 28 12344234523
李四 女 23 13913453521
- 1、硬盘空间是无法修改的,硬盘中数据的更新都是用新内容覆盖旧内容
- 2、内存中的数据是可以修改的
补充思路:
思路一:
# 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 会过多地占用内存
with open('db.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
with open('db.txt',mode='wt',encoding='utf-8') as f:
f.write(data.replace('kevin','SB'))
思路二:
# 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os
with open('db.txt',mode='rt',encoding='utf-8') as read_f,\
open('.db.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('SB','kevin'))
os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')
函数简介
什么是函数 ?
如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数
-
定义函数的格式如下:
def 函数名(参数1,参数2): '''函数的注释''' 函数体代码 return 返回值
函数的语法结构刨析
名称 | 解释 |
---|---|
def | 是定义函数的关键字 |
函数名 | 函数名类似于是变量名 指代函数体代码 命名与变量名一致 |
参数 | 类似于使用函数的时候 给函数内部传递的数据 可以不写 或者单个、多个 |
冒号 | 定义函数也需要有缩进的代码块 |
函数的注释 | 用于解释函数的主要功能、使用方法等说明性文字 |
函数体代码 | 函数的核心功能 也是我们将来编写的核心 return |
特别提醒
'''
定义函数需要使用def关键字
定义函数的过程不会执行函数体代码 只会检测语法
def index():
xsadasd 定义的时候不会报错
def index1():
if 语法错误定义的时候就会报错
调用函数需要使用函数名加括号
'''
举例
# 定义一个函数,能够完成打印信息的功能
def printInfo():
print('------------------------------------')
print(' 你好!Python')
print('------------------------------------')
-
调用函数
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码 能够执行,需要调用它
调用函数很简单的,通过 函数名() 即可完成调用# 定义完函数后,函数是不会自动执行的,需要调用它才可以 printInfo()
运行结果
注意:
- 每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了
- 当然了如果函数中执行到了return也会结束函数
今日学习时间:
这里统计计划学习的时间
1、 上午8:30~12:30
2、 下午2:30~5:30
3、 晚上6:30~9:30
今日学习产出:
这里统计学习计划的总量
- 1、 技术笔记 1遍
- 2、CSDN 技术博客 1篇
- 3、每日录音