Python 入门之 文件
1、文件操作
普通操作文件步骤: 找到文件位置 -> 双击打开 -> 进行一些操作 -> 关闭文件
方法:
r—read(读) w—write(写) a—追加
rd--读字节 wd--清空写,写字节 ad --追加写(字节)
r+ -- 读写 w+ -- 写读 a+ -- 追加读
open() : 打开,open通过python控制操作系统进行打开文件
f = open(file,mode,encoding)
file: 文件的位置
mode: 默认不写就是r
encoding: 文件的编码
f: 文件句柄
file_open = open("t1","r",encoding="utf-8") //Open(“文件的路径”,”进行的操作”,”文件的编码形式”)
文件只能读取一次
(1)读操作
<1> r -- 读
f = open("D:\Test_file\1\小姐姐电话号",mode="r",encoding="utf-8")
print(f.read()) # 全部读取
print(f.read(3)) # 按照字符读取
print(f.readline()) # 默认尾部有一个\n
print(f.readline().strip()) # 读取一行,将\n去除
print(f.readlines()) #一行一行读取,全部存储在列表中
路径:
绝对路径:从磁盘(例如c盘)开始查找
相对路径:相对于某个路径文件进行查找
路径的转义:
1."D:\\Python_s25\\day08\\t1"
2.r"D:\Python_s25\day08\t1" -- 推荐使用
<2> rb -- 读字节
f = open("timg.jpg",mode="rb")
print(f.read()) # 全部读取
print(f.read(3)) # 按照字节读取
print(f.readline()) # 按照行进行读取
print(f.readlines()) # 读取所有行
r和 rb的区别:
1.r需要指定encoding, rb不需要 (字节操作,不能指定encoding)
2.r模式中的read(3) 按照字符读取, rb模式中的read(3) 按照字节读取
read 和 readlines 如果文件较大时,会出现内存溢出
解决方案:当文件较大时,使用for循环进行读取(只是展示了一下)
f = open('t1',mode="r",encoding="utf-8")
for i in f:
print(i.strip())
(2)写操作
<1> w -- 清空写(写的是文本)
先清空文件(在打开文件时进行清空)
再写入内容
注: 当模式为 w 和 a 时,有文件就用当前文件,没有文件就创建一个文件
ff = open("a1",mode="w",encoding="utf-8")
ff.write("123") # 写的内容必须是字符串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("我是一个字符串串") # 写的内容必须是字符串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("[1,2,3,4]\n") # 写的内容必须是字符串
ff.write('1111\n') # 写的内容必须是字符串
ff.write('2222\n') # 写的内容必须是字符串
<2> wb -- 清空写(写字节)
f = open('timg.jpg',mode="rb")
f1 = open("g1.jpg",mode="wb")
content = f.read()
f1.write(content)
(3)追加操作
<1> a -- 追加写(文本)
f = open("b1",mode="a",encoding="utf-8")
f.write("你好啊\n")
f.write("我好啊\n")
f.write("他好啊\n")
f.write("大家好啊\n")
<2> ab -- 追加写(字节)
(4)+ 操作
<1> r+ 读写(有点用)
# 坑 -- 使用方式是错误
f = open("b1",mode="r+",encoding="utf-8")
f.write("今天是周一") # write是清空写
print(f.read())
# 正确的操作:
f = open("b1",mode="r+",encoding="utf8")
print(f.read())
f.write("今天是周一")
<2> w+ 写读(有点用)
f = open("b1",mode="w+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移动光标
print(f.read())
f = open("b1",mode="w+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移动光标
f.write("啊啊啊啊啊啊")
f.seek(0)
print(f.read())
<3> a+ 追加读
f = open("b1",mode="a+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移动光标
f.write("啊啊啊啊")
print(f.read())
(5)其他操作
<1> 移动光标: seek()
seek() # 移动光标
f.seek(0,0) # 移动光标到文件的头部
f.seek(0,1) # 移动光标到当前位置
f.seek(0,2) # 移动光标到文件末尾
f.seek(6) # 移动6个字节。光标是按照字节移动
f = open("a1","r",encoding="utf-8")
print(f.read(5))
f.seek(0,0) # 移动光标到文件的头部
f.seek(0,1) # 移动光标到当前位置
f.seek(0,2) # 移动光标到文件末尾
print(f.read())
f = open("c1","r",encoding="gbk")
f.seek(6) # 光标是按照字节移动
print(f.read(3))
<2> 查看光标: tell()
tell() # 查光标
f = open("c1","r",encoding="gbk")
print(f.read(3))
print(f.tell()) # 按照字节进行计算
<2> 修改文件: import os # os是与操作系统交互的接口模块
f = open('a2',"r",encoding="utf-8")
f1 = open("a1","w",encoding="utf-8")
for i in f:
i = i.replace("日","天")
f1.write(i)
f.close()
f1.close()
os.remove("a2") # 删除不能找回
os.rename("a1","a2")
<3> With open
自动关闭文件
同一时间操作多个文件
import os # os是与操作系统交互的接口模块
f = open('a2',"r",encoding="utf-8")
f1 = open("a1","w",encoding="utf-8")
i = f1.read().replace("天","日") # 将文件中全部内容读取 容易导致内存溢出
f1.write(i)
f.close()
f1.close()
os.rename("a2","a3")
os.rename("a1","a2")
with open("a3","r",encoding="utf-8")as f,\
open('a2',"r",encoding="utf-8")as f1:
print(f.read())
print(f1.read())
2、文件操作的目的
持久化:永久存储
天之涯,海之角,吾与money天荒地老。