python 之 文件处理
文件操作分为读、写、 修改
文件操作-语法
# 1、f = open()方法 f = open('file_path', mode='', encoding='' ) f.read() f.close()
# 2、with方法 with open('file_path', mode='', encoding='' ) as f : f.read()
文件操作-模式
“r” 读模式
“rb”二进制读取模式,数据读到内存里直接是betys格式
“r+”读写模式,写的新内容会添加在文件末尾
“a”追加模式
“w”写模式 ,如果原文件有内容,覆盖原内容
“wb”二进制写模式,不需要指定编码类型
文件操作-其他功能
fileno:返回文件句柄在内核中的索引值,网络编程用,是一个数字,整数
flush:在文件关闭之前,把写的内容从内存中强制刷新到硬盘
f = open('phone.txt', mode='r+', encoding='utf-8') f.write('小明') f.flush()
read:全部读取,从光标的位置开始
readline:只读一行
readlines:以
# 打开文件 f = open('phone.txt', mode='r', encoding='utf-8') # readlines 会读取成为,一行为元素的列表 # data = f.readlines() # readline 只会读取第一行,读取为字符串 data = f.readline() # read 全部读取,读取成为字符串 # data = f.read() f.close() print(type(data)) print(data) for line in data: print(line)
seek:设置光标的位置,长度按照字节计算
tell:查看光标的位置
readable:判断文件是否可读
seekable:判断是否可以seek
writeable:判断文件是否可写
truncate:必须是”读写模式“下,按照指定位置截断,从当前位置开始截断,加上参数,就是从头开始截断多少字节,
# truncate:必须是”读写模式“下,按照指定位置截断,从当前位置开始截断, # 加上参数,就是从头开始截断多少字节 f = open('phone.txt', mode='r+', encoding='utf-8') # 读取后光标会再文件末尾 data = f.read() print(data) # tell 返回光标位置 print(f.tell()) # seek 设置光标到文件开始 f.seek(0) print(f.tell()) f.seek(12) print(f.tell()) # 从光标位置处截断 f.truncate() f.seek(0) data1 = f.read() print(data1) len(data1) # 设置参数,从光标开始,向前截留多少个字节 f.seek(6) f.truncate(3) f.seek(0) data2 = f.read() print(data2) print(len(data2))
文件操作-修改
如果我的文件时“utf-8”编码把光标移到(seek)要修改的位置f.seek(8),那么这时写入(writer),你会发现文件有乱码,因为“utf-8”一个字符是3个字节,但是我们seek到第8个字节,这就像是就像一个字被压成了两半,另一半,电脑已经不认识了它是不可能往后移的,因为之前的内容的内存已经固定了,是硬盘的存储原理导致的,无法改变。两种修改方式:
**占硬盘解决方案**
打开一个旧文件,打开一个新文件,循环读到的数据,修改指定内容之后写到新文件里
文件改名,重命名 import os
os.rename(f_new_name,f_name),完成修改!windows用os.replace覆盖原文件
**占内存方案**
打开文件,先全读到内存f.read()
seek到开头
truncate截掉
修改数据写入文件
字符串的str.replace(old,new)与 文件操作os.replace(new,old) 的区别