目录
文件处理文件的三种打印方式绝对路径和相对路径with 管理上下文文件的高级应用注册登录文件的修改一、打开文件
文件路径 f=open(r'文件路径.py','r',encoding='uft8')打开模式 r(只读) w(只写) a(追加)二、修改/读取文件 f.write(''' 上天降大任于是人也 必先苦其心志 劳其筋骨 ''') 三、保存文件 f.flush() # 快速保存,可以不使用
四、关闭文件 f.close() #告诉操作系统关闭文件
读取/写入/追加写入
rt :只读 read_text 读文本内容 f = open(r'D:D:\python12期\day 09\02 文件的三种打开模式.py', 'rt', encoding='utf8') f.write('gaofeng') data = f.read() print(data) wt :只写 (w清空文件后写入),不可读 f = open(r'D:\day 09\test.py', 'wt', encoding='utf8') f.write('abc') at: 只写入(追加写入) f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'at', encoding='utf8') print(f.readable()) print(f.writable()) f.write('中')encoding指定写入和读文件的编码格式
打开文本的两种格式:t--文本格式
b--二进制格式(一般用于图片/音频/视频的保存)
import requests response = requests.get('http://photocdn.sohu.com/20120708/Img347586981.jpg') data = response.content # 拿到图片的二进制 print(data)判断是否可读可写
print(f.readable())#判断是否可读 print(f,writeable())# 判断是否可写 data = f.read() #读取所有文本的内容 print(data) print(f.readline())# 按行读取 print(f.readlines())#读取所有行放入列表 #比如一筐鸡蛋循环读出文本所有内容
for i in f.read(): print(i)循环出一行行内容;节省内存 #比如母鸡下蛋 文本读一行少一行,每一行末尾默认有一个换行
for i in f: print(i) print('f.readline() : ', f.readline()) 自动拼接列表元素,一行写入 f.writelines(['abc', 'edf', 'gbk']) w和a模式可以自动创建文件 f = open(r'1.jpg', 'wb') f.write(data)文件的路径: 文件在硬盘的地址
绝对路径: 从盘符开始 D:\上海python12期视频\python12期视频\day 09\test.py
相对路径: 执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下
三种新的模式(可读又可写),尽量不要使用
r只读/w清空写入/a追加写入 --> 要么只读,要么只写
假设一个文件即可读又可写,假设写需要10s,读需要5s 针对test.py,我们要写入一个国字,需要10s 过了1s,我们读了这个文件,5s过后,我们看到文件只有一个中字 感觉自己没写入,你会再一次写入一个国字(基于前面一个字是中字) 4s过后,第一个的写入成功了,文件变成 中国 了 再过6s,第二次写入一定失败 以前就发生过(现在的电脑牛逼了,所以不会有这种事发生,但是还是有一定概率的)可写可读 r+
with open('test.py', 'r+', encoding='utf8') as fr: # print(fr.readable()) # print(fr.writable()) fr.write('高级') # 光标在文件头部,覆盖后面的字符可写可读 w+ 和 w 没有任何区别
with open('test.py', 'w+', encoding='utf8') as fw: print(fw.readable()) print(fw.writable())可写可读 a+ a模式默认光标在尾部
with open('test.py','a+',encoding='utf8') as fw: print(fw.readable()) print(fw.writable()) fw.seek(0,0) print(fw.read())综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件
光标的高级应用(移动光标) 8个进制位为一个字节,3个8进制位组成一个字符(针对中文,英文是一个字节一个字符) (00000000-->一个字节 00000000 00000000) --> 一个字符,对应三个字节,对应一个中文 --> utf8
下三种移动光标的位置(以字节为单位)
seek
with open('test.py', 'rb') as fr: # fr.seek(5) # 移动了3个字节,一个中文,默认从开头开始 # print(fr.read()) # print(fr.read().decode('utf8')) whence规定只有0,1,2 三种模式 # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾 fr.seek(3, 0) # 0从开头 # print(fr.read().decode('utf8')) tell : 告诉你当前所在位置 with open('test.py', 'rb') as fr: fr.seek(3, 0) print(fr.tell()) truncate: 截断 with open('test.py', 'ab') as fa: fa.truncate(2) 移动光标(以字符为单位) read with open('test.py', 'r', encoding='utf8') as fr: print(fr.read(3)) # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符文件没有修改只有覆盖
with open('test.py','r',encoding='utf8')as fr,\ open('test_new.py','w',encoding='utf8')as fw: #同时打开多个文件 data = fr.read() data = data.repalce('se','sb') fw.write(data) import os os.remove('test.py') os.rename('test_new.py','test.py')转载于:https://www.cnblogs.com/gfhh/p/11543816.html