文件
r 只读 :只能读不能改动
f=open(" 文件路径 ", mode=" 文件格式 ", encoding= " 编码格式 ")
文件路径: 相对路径: 相对于你当前程序所在的文件夹
当执行文件和现文件不在同一个文件中时: ../ 表示返回上一层文件夹
先退出去,再一层层找进来 ../../表示退两层文件夹
../../file/wuse 表示退两层文件,进入file1文件,再进入wuse文件
绝对路径 : 从磁盘根目录寻找
互联网上的绝对路径: 搜索东西时右键单击,获取地址
文件--新建文件--"果园"-----文件内容:李子,提子,菠萝
f=open( " 果园" , mode=" r " , encoding=" utf-8 " )
s=f.read()======>当文件不存在时====>报错
f.close()
print(s)=====>李子,提子,菠萝
w 只写 : 只写, 只要 遇到 w ,写入了啥, 最后就 只剩 啥
只写过程中, 当文件存在时: 将原来内容覆盖只剩,写入的内容
当文件不存在时: 会自己创建一个文件,将写入内容写入文件中
e.g
f=open(" 果园 " , mode=" w ", encoding=" utf-8 ")
f.write(" 大白梨 ")======> 结果是 " 大白梨 " 原来的内容没有了,只剩大白梨
f.flush()
f.close()
a 追加 : 将写入的内容直接追加到文件内容后边
e.g
f=open(" 果园 " , mode=" a ", encoding=" utf-8 ")
f.write(" 西瓜 ")====>李子,提子,菠萝西瓜 # 直接在内容后边追加写入的内容
f.flush()
f.close()
rb 只读(字节)
e.g
f=open(" 果园 " , mode=" rb ", encoding=" utf-8 ")
bs=f.read() #读出来是字节的形式
print(bs)====> b'xe4x5xh8,,,'
print(bs.decode("utf-8"))=====> 解码后是 李子,提子,菠萝 #需要解码
f.close
wb : 只写 ,只要看到 w ,就覆盖
e.g
f=open(" 果园 " , mode=" wb ")
f.write("桃" . encode("utf-8")) ===> " 桃 "# 看似是字节,但是用pycharm打开文件,却是 编好的文字
f.close
r ,w ,a ====> 处理的是文本
rb ,wb, ab ===> 处理的是非文本,,,,,,,b 表示的是字节 bytes
r+ 读写模式 : 只能先读 后写 ;
因为默认情况下,光标是从文件开头开始的, 因此,必须先读后写
e.g
f=open(" 果园 " , mode=" r + ", encoding=" utf-8 ")
s=f.read() # 先读后写
f.write(" 苹果 ")
f.flush()
f.close()
print(s)====> 运行结果: 李子,提子,菠萝
文件中: 李子,提子,菠萝苹果
若先写后读
f=open(" 果园 " , mode=" r + ", encoding=" utf-8 ")
f.write(" 苹果 ")
s=f.read() # 先写后读 由于默认情况下,光标是在文件开头的
f.flush()
f.close()
print(s)====> 运行结果: 提子,菠萝
文件结果: 苹果,提子,菠萝 结果出现错误
w+ :写读
e.g
f=open(" 果园 ", mode=" w+ ", encoding=" utf-8 ")
f.write(" 今天天气 ")
s=f.read()
print(s)=====> 啥都没有 # 因为 w 会将原来的内容清空所以打印出来 啥都没有
f.flush() 文件中只有 " 今天天气 "
f.close()
f.write(" 今天天气 ")
f.seek(0) # 将光标移至开头
s=f.read 从光标开始读
print(s) ====> 今天天气
f.flush()
f.close
r+例子拓展
深坑; 先读后写 ,,,,,,,不能跟着光标走
在 r+ 模式中, 在没有任何操作前进行 写的东西, 都是在开头写入的
若, 读了一些内容,再写 ,写入的东西都是在末尾
e.g
文件名-精品, 内容-浓缩就是精品,潘长江是精品
f=open("精品", mode=" r+ ",encoding=" utf-8 ")
s=f.read(3) #读3个字符
ss=f.write('' 哈哈 ") #不管前边读了几个字符,后边再写入的内容,或者进行的操作,都是在末尾进行的
print(ss)====>浓缩就是精品,潘长江是精品哈哈
f=open("精品", mode=" r+ ",encoding=" utf-8 ")
f.seek(3) #将光标移动到3的位置,3是一个字,即移动到一个字的位置.
f.seek(0) #将光标移动到开头的位置
f.seek(0,1) # 光标在当前位置
f.seek(0,2) # 将光标移动到结尾的位置
超人的都是精品,
f=open("精品", mode=" r+ ",encoding=" utf-8 ")
f.seek(6) #将光标移到第2个字的位置
s=f.read(3) # 读3个字
print(s) =====> 的都是
f.seek(0) # 再将光标移到开头的位置
ss=f.read(3) # 再读三个字
print(ss) ====> 超人的
文件修改
import os
with open(" 果园 ", mode=" ", encoding="" utf-8 ) as f1 ,
open("果园_副本", mode=" ", encoding="" utf-8) as f2
s=f1.read() #将f1 全部都出来 ====>for line in f1:
ss=s.replace("子","果") # 将子换成果,然后给了ss ===> s=line.replace("子","果")
f2.write(ss) # 将f2 副本 中的覆盖了, 原来的f1 没有变,====> f2.write(s)
os.remove # 将原来的文件 " 果园 "删除
os.rename # 将 将" 果园_副本 ",重新命名为 " 果园 " ,文件果园里的内容就等于修改了
with open ( ) as f 相当于 f=open( )
f.fluse( )
f.close( )
with open ( ) as f1 , # 斜杠 ,表示 换行
open ( ) as f2
f=open(" 果园 ", mode=" ", encoding="" utf-8 )
s=f.readline() # 一行一行的打印
print(s)=====>打印出来第一行
循环 #将每行一行一行打印出来
for line in f: # 将f的每行都交给 line
print(line)
f.close()
f.readable() # 判断文件是否可读
f.writeable() # 判断文件是否可写入
l=f.readlines()
print(l)=[ , , ] #会一行行打出来
赵本山范德彪淑芬刚子老头
f=open("马大帅",mode=" r+ ",encoding="utf-8")
f.seek(12) #先将光标移到四的位置,
f.truncate() #不给参数,表示从文件截取到光标的当前位置 =====> 赵本山范
f.truncate(15) #给参数,表示从文件开头截取到这个参数位置=====> 赵本山范德