第八章

day08

第八章

文件操作

找到文件位置

双击打开

进行一些操作

r -- read(读) w -- write(写) a -- 追加

rb -- 读字节 wb -- 清空写 ad -- 追加写

r+-- 读写 w+ 写读 a+ -- 追加读

关闭文件

open() 打开 open通过python控制操作系统进行打开文件

open("a1","r",encoding="utf-8") open("文件的路径", "进行的操作","文件的编码形式")

file 文件的位置

mode 默认不写就是r

encoding 文件的编码

f 文件句柄

文件只能读一次

读操作

r -- 读

f = open("D:\Python_s25\day08\小姐姐电话号",mode="r",encoding="utf-8")
print(f.read())   # 全部读取
print(f.read(3))  # 按照字符读取
print(f.readline())  # 默认尾部有一个\n
print(f.readline().strip())  # 读取一行
print(f.readline().strip())  # 将\n去除
print(f.readlines()) #一行一行读取,全部存储在列表中

路径

绝对路径:从磁盘(c盘)开始查找

相对路径:相对于某个路经文件进行查找

路径的转义

1."D:\\Python_s25\\day08\\t1"
2.r"D:\Python_s25\day08\t  -- 推荐使用

rb -- 读字节

f = open("timg.jpg",mode="rb")
print(f.read())      # 全部读取
print(f.read(3))     # 按照字节读取p
rint(f.readline())  # 按照行进行读取
print(f.readlines())

r和rb的区别

  • r需要指定encoding rb你需要 (字节操作,不能指定encoding)

  • r模式中的read(3)按照字符读取,rb模式中的read(3)按照字节读取

  • read和readlines 如果文件较大时,会出现内存溢出

  • 解决方案:当文件较大时,使用for循环进行读取

  • 面试题:

    f = open('t1',mode="r",encoding="utf-8")
    for i in f:  
        print(i.strip()
    

写操作

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')  # 写的内容必须是字符串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("[1,2,3,4]\n")  # 写的内容必须是字符串
ff.write('1111\n')  # 写的内容必须是字符串
ff.write('2222\n')  # 写的内容必须是字符

wb -- 清空写(写字节)

f = open('timg.jpg',mode="rb")
f1 = open("g1.jpg",mode="wb")
content = f.read()
f1.write(content)

追加操作

a -- 追加写(文本)

f = open("b1",mode="a",encoding="utf-8")
f.write("你好啊\n")
f.write("我好啊\n")
f.write("他好啊\n")
f.write("大家好啊\n")

ab --追加写(字节)

+操作

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("今天是周一")

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())

a+追加读

f = open("b1",mode="a+",encoding="utf-8")
f.write("今天是周一")
f.seek(0)  # 移动光标
f.write("啊啊啊啊")
print(f.read())

其他操作

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)

查看光标:tell 查光标

tell 查光标
f=open("c1","r",encoding="gbk")
print(f.read(3))
print(f.tell())  # 按照字节进行计

修改文件:import 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"
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.rename("a2","a3")os.rename("a1","a2")

with open

自动关闭文件

同一时间操作多个文件

考的

import 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()

文件操作的目的

持久化:永久存储

posted @ 2019-09-10 23:14  袁昌旺  阅读(73)  评论(0编辑  收藏  举报