文件的操作
1. 文件操作
open 打开
f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes
打开一个文件的时候获取到的是一个文件句柄.即 : f为文件句柄. 执行操作后,记得关闭文件句柄 : f.close()
绝对路径
从磁盘根目录开始寻找
相对路径
相对于当前程序所在的文件夹
../ 上一层文件
文件夹/ 进入xxx文件夹
2. mode:
r: 读取,只读.
读取文件的相关操作
1. read()
默认: 读取文件内容(全部)
f = open("开开.txt",mode = "r",encoding = "utf-8")
a = f.read()
f.close()
print(a)
read(n) 读取n个字符
2. readline() 读取一行
3. readlines() 读取全部. 返回列表
4* (最重要的) for line in f: 每次读取一行内容 记得每一行的内容都有\n,所以读取的line应该去空白. line.strip()
w:
写入. 只写
创建文件
会清空文件
f.flush() # 刷新管道, 因为数据写入文件句柄.
f.close() # 关闭文件句柄.
f = open("开开.txt", mode="w", encoding="utf-8") # 可以帮我们创建文件
f.write('卢本伟牛逼\n')
f.write("克里斯关下门,别让他过来\n")
f.write('给阿姨倒一杯卡布奇诺\n')
# 好习惯
f.flush() # 刷新管道, 把数据写入文件
f.close()
a:
也可以创建文件
追加写 (光标从末尾开始)
f.flush() # 刷新管道, 因为数据写入文件句柄.
f.close() # 关闭文件句柄.
r+:
对于文件而言. 应该有的操作就两个:读, 写
读写操作
w+:
写读操作
a+:
追加写读
所有带b的表示直接操作的是bytes, 当处理非文本文件的时候.
rb
wb
ab: 断点续传
r+b
w+b
a+b
3. 文件操作中关于文件句柄的相关操作
seek() 移动光标
f.seek(0) 移动到开头(最多)
f.seek(0, 2) 移动到末尾
seek:两个参数
1. 表示偏移量
2. 从xxx开始偏移, 默认0, 开头 1, 当前位置 2, 末尾
tell
返回光标所在的位置,pring(f.tell) 显示的值为光标所在的位置,且值是以字节为单位计算的(在"utf-8"里面,如果读取了1个汉字,值就是3. 如果读取了1个字母,值就是1)
4. 文件修改, 实际操作(重点)
# 需求: 把文本文档开开.txt中的"卢本伟"换成"UU"
# 必须:
# 1. 先从文件中读取内容
# 2. 把要修改的内容进行修改
# 3. 把修改好的内容写人一个新文件
# 4. 删除掉原来的文件
# 5. 把新文件重命名成原来的文件的名字
# 导入os模块 os表示操作系统
import os
f = open("开开.txt", mode="r", encoding="utf-8")
f2 = open("开开1.txt", mode="w", encoding="utf-8")
# with会自动的帮我们关闭文件的链接 (也可以用这种方法)
# with open("夸一夸alex", mode="r", encoding="utf-8") as f, \
# open("夸一夸alex_副本", mode="w", encoding="utf-8") as f2:
for line in f:
if "卢本伟" in line:
line = line.replace("卢本伟", "UU")
f2.write(line)
f.close()
f2.flush()
f2.close()
# 删除原来文件
os.remove("开开.txt")
# 重命名副本为原来的文件名
os.rename("开开1.txt", "开开.txt")
# time.sleep(3) # 程序暂停3秒. (想看运算顺序时用这个)
# (1)能看到文本文档是先添加一个开开1.txt
# (2)然后开开.txt会被删除
# (3)最后开开1.txt会重命名为开开.txt
浙公网安备 33010602011771号