Python文件的基础操作(2)
- 二进制模式下读写操作
- 练习
- 控制文件内指针(光标)的移动
- 文件的修改
- 函数的介绍
练习
1. 让用户输入被拷贝的文件路径(源文件路径)
2. 输入即将要拷贝的文件路径(目标文件路径)
3. 以读的模式打开源文件,以写的模式打开目标文件
source_file_path = input('请输入待拷贝的文件路径:').strip()
dst_file_path = input('请输入目标文件的路径:').strip()
with open(r'%s' % source_file_path, 'rb') as read_f:
with open(r'%s' % dst_file_path, 'wb') as write_f:
for line in read_f:
write_f.write(line)
二进制模式下读写的操作
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read(3)
with open('a.txt',mode='rb') as f:
data=f.read(3)
t模式下:
f.read() 如果不指定参数,默认情况下是一次性读取所有
f.read(5) 如果指定了参数,返回的就是字符个数
b模式下:
f.read(5) 如果指定了参数,返回的就是字节个数
如果文件中有中文字符,切记书写的数字要是3的倍数,如果有中文也有英文字符,这个数字需要计算了
指针:就可以理解成光标的移动
with open('a.txt', 'rb') as f:
print(f.read(2))
f.seek(-3, 2)
print(f.read())
"""
f.seek()
offset: int,
代表的是移动的偏移量
如果是正数,就往右边移
如果是负数,就往左边以----------》左边要可移动
"""
import time
with open('access.log', mode='rb') as f:
f.seek(0, 2)
while True:
line = f.readline()
if len(line) == 0:
time.sleep(0.5)
else:
print(line.decode('utf-8'), end='')
文件修改
mode='r+'
mode='w+t'
mode='a+t'
1. 硬盘中得数据是不允许直接修改的
2. 内存中得数据是可以直接修改的
a.txt
kevinkevin 山东 179 49 12344234523
李二蛋 河北 163 57 13913453521
王全蛋 山西 153 62 18651433422
'''方式一:'''
with open('a.txt', 'r', encoding='utf-8') as f:
data = f.read()
print(data)
with open('a.txt', 'wt', encoding='utf-8') as f:
f.write(data.replace('kevin', 'kevinSB'))
'''方式2:'''
import os
with open('a.txt',mode='rt',encoding='utf-8') as read_f, \
open('.a.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('SB','kevin'))
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
函数的介绍
函数的语法
def 函数名(参数1,参数2,...):
"""文档描述"""
函数体
return 值
"""
1. def 就是定义函数的关键字,它不能够省略,必须写
2. my_len():函数名,函数名的命名遵循变量的命名规范,他也是必填的,不能省略的,括号不能省略
3. a, b称为是函数的参数,是可选的,可有可无
参数就是执行函数的一些前提条件
4. '''函数注释'''
注释不参与函数的执行,只起到函数功能的提示作用,以及各个参数是什么意思
# 可有可无的,但是,推荐每个函数都加上函数注释
5. # 函数体
才是函数的核心,它是函数所具备的核心功能,应该是必须有的,pass
没有函数体的函数是没有意义的函数,一般情况都是要有函数体的
6. 返回值 return 函数的返回值
# 返回值也是可选的,可以有返回值,也可以没有返回值,但是一般情况下都要有返回值
# 一个函数只能有一个返回值...
"""
函数的定义与调用
1. 函数必须先定义后调用,没有定义函数是一定不能够调用的
2. 函数在定义阶段,只检测语法是否错误,不检测逻辑是否有问题
3. 逻辑上的错误只会在调用阶段检测
4. 函数一定是被调用之后才会执行函数内部的代码块,不调用函数一定不会执行函数的
函数名()
函数如果在定义阶段有参数,那么,在调用的时候,连参数一块写上
函数调用的内部原理:
1. 先在内存空间中申请一块空间地址来存储函数体代码
2. 把函数名和函数体所在的空间地址绑定在一起
3. 以后只需要通过函数名()来访问函数体代码即可
函数的类型
1. 内置函数
len print input 之前学习的数据类型的各个方法
2. 自定义函数
1. 无参函数:函数在定义阶段没有参数
def my_len():
pass
my_len()
2. 有参函数:在函数定义阶段有参数的存在
def my_len(a, b):
pass
my_len(1, 2)
3. 空函数
def my_len():
pass
"""作用就在于可以帮助我们梳理业务逻辑"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)