文件操作
1,文件操作的函数
f= open(文件名(路径),mode="模式(r\w\a\r+\b)",encoding="字符集(GBK\UTF-8)")
content = f.read() \ write()
print(content)
f.close()
文件路径:
1,绝对路径:从磁盘的根目录找 或者 从互联网上
2,相对路径:相当于当前程序所在的文件夹 ../上一层文件夹
我们更推荐大家使用相对路径. 因为在我们把程序拷贝给别人使用的时候. 直接把项目拷贝走 就能运行. 但是如果用绝对路径. 那还需要拷贝外部的文件.
2,模式 (r, w, a, r+, b 常用)
r 只读
1.read() 将文件中的内容全部读取出来. 弊端: 占内存. 如果文件过大.容易导致内存崩溃
2.read(n) 读取n个字符. 需要注意的是. 如果再次读取. 那么会在当前位置继续去读而不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
3.readline() 一次读取⼀行数据, 注意: readline()结尾, 注意每次读取出来的数据都会有一 个\n 所以呢. 需要我们使用strip()方法来去掉\n或者空格
4.readlines()将每⼀行形成⼀个元素, 放到⼀个列表中. 将所有的内容都读取出来. 所以也是容易出现内存崩溃的问题.不推荐
5. 循环读取. 这种⽅式是组好的. 每次读取一⾏内容.不会产生内存溢出的问题
注意: 读取完的⽂件句柄⼀定要关闭 f.close()
w 模式:只写
带w的,只要你操作了,第一次操作就会清空原文件数据全部清空增加写的内容,后面写不会清空
如果文件不存在就创建文件
a 模式:追加
写的时候,换行需要手动控制
b:处理非文本文件——wb rb ab(bytes类型)如果处理的是非文本文件,mode里如果有b,encoding就不能给了
+:
r+:读写
最好用的读写同时存在的模式
r+的一个坑:不论你读取了多少内容,无论光标在哪,写入的时候都是在结尾写入
w+:写读
清空内容,写入
a+:写读追加写读
3, 常用的操作
1,光标(seek) 移动的单位是byte. 所以如果是UTF-8的中文部分要 是3的倍数
f.seek(0)——将光标移动到开头
f.seek(0,2)——将光标移动到末尾 seek的第二个参数表⽰的是从哪个位置进⾏偏移, 默认是0, 表示开头, 1表示当前位置, 2表示结尾
2,tell()——拿到光标的位置
3,truncate()——截断内容
从文件开头截断到光标位置
如果给参数,从头截断到参数位置
深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显⽰的是多少. 再写入 或者操作⽂件的时候都是在结尾进⾏的操作. 所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进⾏截断 关于truncate(n), 如果给出了n. 则从开头进行截断, 如果不给n, 则从当前位置截断. 后面 的内容将会被删除
4,修改文件
1,引入os模块 import os
2,打开目标文件,r
3,打开副本文件,w
4,从r中读取内容进行修改,写入副本中
5,删除源文件
6,重命名副本