文件的操作
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