一 . 文件操作
# open 打开
# f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes
# 打开一个文件的时候获取到的是一个文件句柄.
# 首先需要有一个 "alex和wusir的故事"的文档
f = open("alex和wusir的故事", mode="r", encoding="utf-8")
# 读取内容
content = f.read() # 全部都读取出来
print(content)
# 坑:
c2 = f.read() # 读取不到内容. 因为上面已经读取完毕. 光标在末尾
print("c2", c2)
# 良好的习惯
f.close() # 关闭连接
# 也可以用with对文件进行操作
with open("alex和wusir的故事", mode="r", encoding="utf-8") as f:
f.read()
二 . 文件路径
1. 相对路径: 相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字
如果不在这个文件夹内. 可能需要出文件夹或者进文件夹
出文件夹 ../
进文件夹 文件夹/
2. 绝对路径: 从磁盘根目录寻找路径 (有问题,比如说发给用户的是在D盘下的文件但是用户没有D盘就会出现问题)
只有在记录日志的时候可以用到绝对路径
日志: 程序运行过程中记录的信息.
三 . mode 的各个功能
mode: r
f = open("乔峰会使用降龙十八掌.txt", mode="r", encoding="utf-8")
print(f.read(5)) # 读取5个字符
print(f.read(5)) # 继续读5个
print(f.readline().strip()) # 换行符为分割, strip()可以去掉换行. 读取到的内容第一件事就是去掉空白
print(f.readline()) # 换行符为分割
f.close()
print("周润发", end="胡辣汤")
print("周星驰")
print(f.readlines()) # 一次性把文件中的内容读取到列表中.
mode: w
# 每次用w模式打开文件, 都会清空这个文件(坑)
f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件
f.write('河南特色
')
f.write("东北特色
")
f.write('陕西特色
')
# 好习惯
f.flush() # 刷新管道, 把数据写入文件
f.close()
mode: a
f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入内容
f.write("你叫什么名字啊?")
f.read() # not readable
f.flush()
f.close()
mode: +
f = open("葫芦小金刚", mode="r+", encoding="utf-8")
content = f.read(2) # 顺序必须先读, 后写
# r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
f.write('五娃')
print(content)
一上来会清空文件. 没人用
f = open("葫芦小金刚", mode="w+", encoding="utf-8")
# content = f.read(2) # 顺序必须先读, 后写
# # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
# f.write('五娃')
f.write("又能吐火的, 有能吐水的.")
# 移动光标
f.seek(0) # 移动到开头
s = f.read()
print("=========>", s)
追加写读, 光标在末尾. 所有的写都是在末尾
f = open("葫芦小金刚", mode="a+", encoding="utf-8")
f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!")
f.seek(0)
s = f.read()
print("=========>", s)
四 . 文件复制
f1 = open("c:/wuyanzu.jpg", mode="rb")
f2 = open("d:/wuyanzu.jpg", mode="wb")
for line in f1: # line是从f1中读取的内容
f2.write(line) # 把读取的内容原封不动的写出去
f1.close()
f2.flush()
f2.close()
五 . seek 和 tell
f = open("胡辣汤", mode="r+", encoding="utf-8")
f.seek(0,2) # 移动到末尾
content = f.read(5)
print(content)
f.seek(0) # 移动到开头
print(f.read())
print(f.tell()) # 字节
f.seek(3)
print(f.read())
六 . 文件修改
# 需求: 把好人换成呵呵
# 必须:
# 1. 先从文件中读取内容
# 2. 把要修改的内容进行修改
# 3. 把修改好的内容写人一个新文件
# 4. 删除掉原来的文件
# 5. 把新文件重命名成原来的文件的名字
# 导入os模块 os表示操作系统
import os
# f = open("夸一夸alex", mode="r", encoding="utf-8")
# f2 = open("夸一夸alex_副本", 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("好人", "sb")
f2.write(line)
# time.sleep(3) # 程序暂停3秒
# 删除原来文件
os.remove("夸一夸alex")
# 重命名副本为原来的文件名
os.rename("夸一夸alex_副本", "夸一夸alex")