Python Magic——文件操作

文章目录


前言

文件操作,通常用在数据保存与数据处理使用,庞大的数据可能以字符串的形式写在程序里,如果真这样想必是有啥大病。。。


文件操作

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) 程序的解耦:将函数中重复部分构成一个新的函数,进而调用代替,减少代码量

总结

文件操作其实简简单单,无非就是存与取两种操作,至于对其数据的操作还是要运用程序魔法来进行,今天先简单说这么一点,先练一练这些基本的文件操作魔法吧!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值