# "通讯录"
# open() # 打开
# file # 文件的位置(路径)
# mode # 操作文件的模式
# encoding # 文件编码方式
# f # 文件句柄
#
f = open("通讯录",mode="r",encoding="utf-8")
print(f.read())
f.close()
#
# 操作文件:
# 1. 打开文件
# 2. 操作文件
# 3. 关闭文件
#
# 文件操作的模式:
# r,w,a (重要)
# rb,wb,ab (次要)
# r+,w+,a+ (没啥用)
#
# f = open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding="文件的编码") # 内置函数
# f(文件句柄)
rb,wb,ab
# rb
# rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集
f1 = open("1.jpeg","rb") # 打开图片
print(f1.read()) # 全部读取
print(f1.read(3)) # 按照字节读取
# 输出字节
# b''
#
# wb 没有文件创建一个文件
# wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
f = open("3.jpg","wb") # 没有文件创建一个文件
f.write(f1.read())
# ab 没有文件创建一个文件
f = open("2.jpg","ab")
f.write("你好啊".encode("utf-8"))
f = open("2.jpg","rb")
print(f.read())
# +操作
# r+: 读写 - 先读后写
#
# 错误的操作 (坑,不能先写后读)
f = open("萝莉小姐姐电话号","r+",encoding="utf-8")
f.write("常鑫你太美")
print(f.read())
# 正确的操作:
# 打开一个文件,写入"常鑫你太美"
f = open("萝莉小姐姐电话号","r+",encoding="utf-8")
print(f.read())
f.write("常鑫你太美")
# w+ 清空写,读
f = open("萝莉小姐姐电话号","w+",encoding="utf-8")
f.write("常鑫你太美")
print(f.tell())
# 使用utf-8 ,一共占用了15个字节f.seek(15) #
print(f.tell())
print(f.read())
# a+ 追加写,读
f = open("萝莉小姐姐电话号","a+",encoding="utf-8")
f.write("常鑫你太美")
print(f.tell()) # 字节数
print(f.seek(0,0)) # 0将光标移动到文件的头部
print(f.read()) # 常鑫你太美常鑫你太美
# 输出
# 30
# 0
# 常鑫你太美常鑫你太美
# 其他操作:
# tell 查看光标 --- 返回的是字节数
# seek 移动光标
# 1.seek(0,0) -- 移动到文件的头部
# 2.seek(0,1) -- 当前位置
# 3.seek(0,2) -- 移动到文件的末尾
# 4.seek(3) -- 按照字节进行移动(按照编码集,自己进行计算)
f = open("萝莉小姐姐电话号","r",encoding="gbk")
print(f.read(3)) # 字符
f = open("萝莉小姐姐电话号","rb")
print(f.read(3)) # 字节
f = open("萝莉小姐姐电话号","r",encoding="gbk")
print(f.read(3)) # 字符
# 错误操作
f = open("萝莉小姐姐电话号","r",encoding="gbk")
f.seek(-1)
print(f.read())
# 文件修改
f = open("萝莉小姐姐电话号","r",encoding="gbk")
s = f.read()
s1 = s.replace("你太美","吃煎饼")
f1 = open("萝莉小姐姐电话号","w",encoding="gbk")
f1.write(s1)
# with 关键字 open("萝莉小姐姐电话号","r",encoding="gbk") as f:
# 文件操作的具体内容
# w和a 检测有文件就操作,没文件就创建
with open("萝莉小姐姐电话号","r",encoding="gbk")as f,\
open("萝莉小姐姐电话号.txt","w",encoding="gbk")as f1:
for i in f:
s1 = i.replace("大烧饼","井盖")
f1.write(s1)
import os
os.rename("萝莉小姐姐电话号","萝莉小姐姐电话号.bak")
os.rename("萝莉小姐姐电话号.txt","萝莉小姐姐电话号")
with open("萝莉小姐姐电话号","r",encoding="gbk")as f:
pass # 缩进里操作文件
print(f.read()) # 文件及已经关闭了
总结
"""
# 1.文件操作:
open -- 打开文件
file -- 文件路径
mode -- 操作文件的模式
encoding -- 文件的编码集
打开文件
操作文件
关闭文件
# r,w,a (******)
# r: 读文本
read() 全部读取
read(3) 看文件的操作方式 r/w/a 字符
readline 读取一行(自带换行符)
readlines() 一行一行读取存放在列表中
# w:清空,写
open("xxx","w",encoding="utf-8") # 进行清空
write() 只能写字符串
# a:追加
在文本的末尾进行写入
write()
rb,wb,ab(****)
#rb:读字节
read() 全部读取
read(3) 看文件的操作方式 rb/wb/ab 字节
readline 读取一行(自带换行符)
readlines() 一行一行读取存放在列表中
wb:清空,写
open("xxx","wb") # 进行清空
write() 只能写字节
ab:追加
open("xxx","ab")
write() 只能写字节
r+,w+,a+ (r+)
r+:读写
错误的方式是写读
先读后写
w+:清空写,读
1.清空文件
2.读取内容(默认读取的是空)
3.移动光标
a+:追加写,读
1.先写后读
2.读取内容(默认读取的是空)
3.移动光标
# 注意点: (a,ab,a+)将光标移动到某个位置进行,写入的时候还是在文件的末尾
其他操作:
tell() 查看光标返回的是字节
seek() 移动光标
seek(0,0) 移动文件头部
seek(0,1) 当前位置
seek(0,2) 移动文件末尾
seek(3) # 按照字节进行计算 (计算方式根据编码计算)
with open("文件路径","操作模式",编码")as f:
操作文件
with open的好处:
1.可以同时打开多个文件
2.能够自动关闭文件
修改文件内容:
1.创建一个新的文件
2.将文件中的内容进行替换
3.替换后的内容写入新文件中
4.改变文件名
路径:
绝对路径: 从磁盘根部进行查找
相对路径: ../返回上一级 --推荐使用
转义:
1."C:\\user\\ner"
2. r"C:\user\ner" -- 推荐使用
"""