文件操作
一 , 文件的内部内容进行操作
1.open('文件路径',mode='模式(默认是只读)',encoding='编码')
路径必须写上后缀(.txt等)
f = open('d:/小护士.txt',mode='r',encoding='utf-8')
content = f.readlines()
line1 = f.readline().strip() # 空白, 空格, ,
print(line1)
读r 只能读 不能写
1.open('文件路径',mode='模式(默认是只读)',encoding='编码')
路径必须写上后缀(.txt等)
f = open('d:/小护士.txt',mode='r',encoding='utf-8')
content = f.readlines()
line1 = f.readline().strip() # 空白, 空格, ,
print(line1)
f.close
f 是一个可迭代对象
f = open('d:/周润发大战奥特曼.txt',mode='r',encoding='utf-8' )
for line in f : # 内部其实调用的是readline()
print(line)
f.close() # 一定记得写上
写w 只能写 不能读
f = open('d:/sylar.txt',mode='w',encoding='utf-8')
f.write('周笔畅 ')
f.write('胡辣汤 ')
f.write('实付款 ')
f.flush()
f.close()
f.write() # 先清空 再写入
追加a 追加写 只能写入
f = open('d:/sylar.txt',mode='a',encoding='utf-8')
f.write('娃哈哈') # 追加写
f.write('爽歪歪')
f.flush()
f.close()
b : bytes 这个时候处理文件的是字节
操作非文本文件的时候用带b的 在rb模式下,不能选择encoding字符集
rb
作用 : 在读取非文本文件的时候,比如读取MP3.图像,视频等信息的时候就需要用到rb.因为这种数据是没办法直接显示出来的.在文件上传下载时还会用到还有看的直播.实际上用的就是这种数据.
wb
ab
文件拷贝
f1 = open('d:/桌面背景.jpg',mode='rb')
f2 = open('d:/abc.jpg'mode='wb')
for line in f1:
f2.write(line)
f1.close()
f2.flush()
f2.close()
文件的路径
1. 绝对路径
1.从磁盘根目录寻找
2.网络上路径
2.相对路径# 更推荐用相对路径 因为把程序拷给别人用的时候.直接把项目考走就能运行,如果用绝对路径.还需要拷外部文件.
相对于当前你这个程序所在的文件夹.(用的最多的)
绝对路径相对于相对路径来说
r+ # 带加号的使用频率最高的 读写模式
读写模式
如果执行了读操作 那么写操作的时候都是写在文件的末尾和光标没关系
正确用法 先读 后写
w+
很少用 需要移动光标
a+ 追加读模式
f = open('菜单',mode='a+',encoding='utf-8')
f.write('韭菜鸡蛋饺子')
f.seek(0)
content = f.read()
print(content)
光标 使用 tell 可以知道 光标在哪里 单位
seek()可以移动光标
r: 默认光标在开头
读写的时候单位是字符 但是光标移动的单位是字节
光标移动到末尾 seek(0,2)
seek(偏移量,位置)
位置 : 0开头 , 1当前位置 , 2末尾
truncate() 截断文件
f = open('我的天哪', mode='r+', encoding='utf-8')
f seek(9)
f.truncate(12) # 如果没有参数. 按照光标来截断. 如果有参数. 截断到参数位置
f.flush()
f.close()
注意 : 在r+模式下.如果读取了内容 . 不论读取内容多少 , 光标显示的是多少.再写入或者操作文件的时候都是在结尾进行的操作
所以如果想要截断操作.要先挪动光标 挪动到想要截断的位置,然后进行截断,关于truncate(n),如果给了n则从头开头开始截断, 如果不给n,则从当前位置截断,后面的内容会被删除.
二 , 修改文件 过程 将文件中的内容读取到内存中将信息修改完毕,然后将源文件删除,将新文件的名字改为老文件的名字.
语句为
import os
with open('alex',mode='r',encoding='utf-8') as f1,
open('alex_副本',mode='w', encoding='utf-8') as f2: # 这种写法可以省去 f1.flush() f1.close() 语句
for line in f1:
new line = line.replace('good','sb')
f2.write(new line)
os.remove('alex')
os.rename('alex_副本','alex')