文章目录
前言
文件操作,通常用在数据保存与数据处理使用,庞大的数据可能以字符串的形式写在程序里,如果真这样想必是有啥大病。。。
文件操作
1. 文件操作基本手法读取日志文件最后一行数据
f = open('a',encoding='utf-8') #文件打开,编码方式utf-8
data = f.read() #读文件
print(data)
f.close() #文件关闭
2. 文件操作魔法的几种模式
① r—只读模式
(1) read()—读取文件全部,若读完,后面再调用readline则将无法再读出
f = open('a','r',encoding='utf-8')
data = f.read()
print(data)
print(f.readline())#前面已经读完,此刻再读则无法读出,返回为空
f.close()
(2) readline()—一次使用读一行,若无,则打印空
f = open('a','r',encoding='utf-8')
n = 1
while True:
m = f.readline()
if m=='':
break
print('第%d句:' %n,m)
n+=1
f.close()
(3) readlines()—读取所有行,并存入列表
f = open('a','r',encoding='utf-8')
print(f.readlines()) #换行符\n也会被存入列表
f.close()
(4) readable()—判断是否可读
f = open('a','r',encoding='utf-8')
print(f.readable())
f.close()
② w—只写模式
(1) 若文件存在,将会清除原文件;若文件不存在,将会新建空文件
(2) write()—写入内容,\n换行结束本行,可编写多行
f = open('b','w',encoding='utf-8')
data = 'I love you\nPython'
f.write(data)
f.close()
(3) writelines()—以列表的形式写入,\n换行,内容只能为字符串
f = open('b','w',encoding='utf-8')
data = ['I love you\n','Python']
f.writelines(data)
f.close()
③ a—追加(追加模式写入,不会覆盖),write()写到文件最后,无法read()读取
f = open('b','a',encoding='utf-8')
data = '\nI love you\nPython'
f.write(data)
f.close()
④ r+,w+,a+ —可读可写
⑤ b二进制形式,rb二进制形式读,wb二进制形式写入,b方式不能指定编码(encoding=’utf-8’)
f = open('a','rb')
data = f.read()
print(data.decode('utf-8'))
f.close()
⑥ 几种文件操作魔法的道具
(1) closed—判断文件是否关闭
f = open('a','r',encoding='utf-8')
data = f.read()
print(f.closed)
print(data)
f.close()
print(f.closed)
(2) encoding—查看文件编码方式
f = open('a','r',encoding='utf-8')
data = f.read()
print(f.encoding)
print(data)
f.close()
(3) flush()—刷新
(4) name—文件名
(5) tell()—当前光标所在位置(字节位置)
(6) Newline—读取文件中真正的换行字符
(7) Truncate()—切文件(截取),不能用在w与w+当中
f = open('a','r+',encoding='utf-8',newline='')
data = f.read()
print(f.name)
f.flush()
print(f.tell())
print(data)
print(f.truncate(6))
f.close()
(8) seek()—控制光标移动f.seek(字节),b方式打开
默认为0,文件开头
字节数:汉字3个字节,换行2个字节,字母数字空格1个字节
seek(n,1)—相对前一次光标位置,向后n个位置
seek(-n,2)—倒序,从后数第n个位置
f = open('b','rb')
data = f.read()
print(f.tell())
f.seek(6) #字节数,汉字3个字节,换行2个字节,字母数字空格1个字节
print(f.tell())
f.seek(16,1) #相对前一次光标位置,向后16个位置
print(f.tell())
f.seek(-6,2) #倒序,从后数第6个位置
print(f.tell())
f.close()
3. 读取日志文件最后一行数据(练习)
f = open('b','rb')
for i in f:
offs = -10 #自定义长度(只要不要太大即可,以免超过文件最大字节),倒叙
while True: #根据循环来判断最后一行
f.seek(offs,2)
data = f.readlines() #读取光标位置,从此往后读取,一行为列表一个元素
if len(data)>1: #通过循环使offs不断变大,从而是最后一行读取完整(或offs过大直接得出最后一行)
print('文件最后一行是:%s' %(data[-1].decode('utf-8')))
break
offs *= 2
4. 文件操作魔法的 增删改查 技能
基本模板
def adder():
print('增加')
def delete():
print('删除')
def update():
print('修改')
def look():
print('查看')
if __name__ == '__main__':
msg ='1:增加,2:删除,3:修改,4:查看'
msg_dic={'1':adder,'2':delete,'3':update,'4':look}
while True:
print(msg)
choice = input('请输入选项:').strip()
if not choice:
continue
if int(choice) > 4:
print('没有此功能')
continue
msg_dic[choice]()
5. 程序小总结
(1) 函数
(2) tag True/False警告符,通过警告符tag来进行改变操作方向,或来结束死循环
tag = True
i = 0
while tag:
if i==tag:
tag = False
print('结束循环')
else:
i = True
print('继续循环')
(3) 文件处理
(4) 程序的解耦:将函数中重复部分构成一个新的函数,进而调用代替,减少代码量
总结
文件操作其实简简单单,无非就是存与取两种操作,至于对其数据的操作还是要运用程序魔法来进行,今天先简单说这么一点,先练一练这些基本的文件操作魔法吧!