python学习笔记day8:文件操作

1.文件路径:d:\mywork.txt
2.文件编码方式:utf-8,gbk
3.文件操作“:只读,只写,读写,写读,追加
以什么编码方式储存的文件就要以什么编码方式打开,否则会很出现乱码
3.1 只读
3.1.1 文字类文件"r":以str的形式读取出来

f = open("读取文件", mode="r", encoding="utf-8")
cotent = f.read()
print(cotent)
f.close()

3.1.2 非文字类文件(图片,视频) “rb”:转化成bytes类型,以bytes的形式读取出来

f = open("读取文件", mode="rb")
cotent = f.read()
print(cotent)
f.close()

3.2 只写:如果没有此文件的话就会创建文件,若存在此文件的话会先将文件内的信息清空,然后再写入新信息
3.2.1 “w” :直接写入文件,需要在open中添加字符编码方式:utf-8,gbk

f = open("只写文件", mode="w", encoding="utf-8")
f.write("写入文件成功0.0!")
f.close()

3.2.2 “wb”:写入bytes类型,将写的内容加上编码方式

f = open("只写文件", mode="wb")
f.write("写入文件成功byte!".encode("utf-8"))
f.close()

3.3 追加:
3.3.1 “a”:在源文件中的光标后继续添加新的内容,保留原先的旧内容

f = open("只写文件", mode="a", encoding="utf-8")
f.write("追加成功!")
f.close()

3.3.2 “ab”:以bytes类型追加内容

f = open("只写文件", mode="ab")
f.write("bytes追加成功!".encode("utf-8"))
f.close()

3.4 读写 无论是读文件,还是写文件都是按照光标来执行的
3.4.1 “r+”:先读后写,先进入文件读取文件内容,然后光标指向文件的末位,再进行写操作,新写入的内如不会覆盖旧的内容,并不是只能进行两步操作,只要光标移动合适,可以多次读取文件

f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
l = f.read()
print(l)
f.write("读写文件,写入成功")
f.seek(0)
print(f.read())
f.close()

3.4.2 “r+”:先写后读,如果先执行写操作,由于文件此时的光标在0位置,所以写入的内容会覆盖掉原来的内容,写多少就覆盖多少,写完之后再进行读取,如果新写入的内容少于原先的文件内容,那么此时光标就对应着原先文件中还没有被覆盖掉的剩余部分,将之读取出来,如果如果新写入的内容多余原先的文件内容,那么此时光标对应为文件末尾,读取不出任何内容信息

f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
f.write("先写文件操作")
l = f.read()
print(l)
f.close()

3.4.3 “r+b”:读取出来的都是bytes类型,写入文件也是bytes类型

f = open("文件操作\\"+"读写文件", mode="r+b")
l = f.read()
print(l)
f.write("读写文件,写入成功".encode("utf-8"))
f.close()

3.5 写读
3.5.1 “w+”:只要有w都会先清除文件的内容,然后如果在写入完成后直接读取的话,由于此时光标在最后一个字的后面所以什么都读取不出来,如果想要读取刚写入的内容可以先移动光标位置

f = open("文件操作\\"+"写读文件", mode="w+", encoding="utf-8")
f.write("写入成功!")
f.seek(0)
print(f.read())
f.close()

3.5.2 “w+b”:读取出来的都是bytes类型,写入文件也是bytes类型
3.5.3 “a+”:也是写读的一种只不过是追加的方式写入文件

f = open("文件操作\\"+"写读文件", mode="a+", encoding="utf-8")
f.write("追加成功!")
f.seek(0)
print(f.read())
f.close()

4.功能详解
4.1 read:可以按照字符的个数来读取,

# 字符:一段文字中能看到的最小单位
f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
l = f.read(4)
print(l)
f.close()

4.2 seek:调整光标,是按照字节来调整的,编码章节具体讲述字节与编码的关系

# 英文子母中一个字母代表一个字节
# 中文utf-8中一个中文代表三个字节
# 中文gbk中一个中文代表两个字节
f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
f.seek(3)
l = f.read()
print(l)
f.close()

4.3 tell: 查询光标当前位置,也是按照字节数来返回光标位置

f = open("文件操作\\"+"写读文件", mode="a+", encoding="utf-8")
f.write("凌志申")
count = f.tell()
print(count)
f.seek(count-9)
print(f.read())
f.close()

4.4 readline 一行一行的读取
4.5 readlines 每一行读取为列表中的一个元素

在这里插入代码片f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
line = f.readline()
f.seek(0)
lines = f.readlines()
print(line)
print(lines)
f.close()

4.6 truncate:截取一部分,按字节截取,目前测试不按光标走,就是从头开始截取

f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
f.truncate(3)
f.close()

4.7 for循环:也是输出整个文件

f = open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")
for i in f:
    print(i)
f.close()

5.with…as…:另一种文件的打开方式,同时可以打开多个文件,之最推荐使用得失这种方式,因为可以省去文件close的操作,非常方便安全

# with
with open("文件操作\\"+"读写文件", mode="r+", encoding="utf-8")as f:
    print(f.read())

6.文件修改:文件是不能修改的,只能通过先创建一个新的文件,将旧文件的内容先取出来进行修改后再写入新文件中,最后用新文件代替旧文件

with open("文件操作\\"+"修改文件", mode="r", encoding="utf-8")as f1, open("文件操作\\"+"修改文件1", mode="w+", encoding="utf-8")as f2:
    for line in f1:
        if "冬天" in line:
            line = line.replace("冬天", "冬季")
        # 写文件
        f2.write(line)
        print(line)
    print(f2.read())
import os
# 删文件
os.remove("文件操作\\"+"修改文件")
os.rename("文件操作\\"+"修改文件1", "文件操作\\"+"修改文件")

你可能感兴趣的:(个人学习)