第二篇:字符串格式化与文件操作

一.字符串格式化

字符串的格式化有两种方式:百分号方式(较老)、format方式(先进)
1、百分号方式
%s万能的可以接收任意类型
msg = "i am %s, my hobby is %s" %('lif','alex')
print(msg)
%d只接收int数字类型
msg = "i am %s, age is %d" %('alex',18)
msg = "i am %(name)s, age is %(old)d"%({'name':'alex','old':18})  #传字典
print(msg)
%f只接收float数字类型,%.2f表示保留两位小数
tpl = 'percent %.2f'%99.6745
tpl = 'percent %(pp).2f'%({'pp':99.4567})                          #传字典
print(tpl)

2、format方式,常用方式
位置参数传入,必须一一对应({}什么也不填,或者填传入位置)
msg  = "i am {}, age is {}, my hobby is {}".format('alex',18,'footbal')
msg  = "i am {0}, age is {1}, my hobby is {2}".format('alex',18,'footbal')
msg  = "i am {0}, age is {1}, my hobby is {2}".format(*['alex',18,'footbal'])
print(msg)
赋值形式或**字典的形式传入
tpl = "i am {name}, age is {age}, my hobby is {hobby}"
msg = tpl.format(name="alex",age=18,hobby="footbal")
msg = tpl.format(**{'name':'alex','age':18,'hobby':'ootbal'})
print(msg)
tpl = "i am {0[0]}, age is {0[1]}, my hobby is {0[2]}"
msg  = tpl.format(['alex',18,'footbal'])
print(msg)
设定参数要求
msg = "i am {:s}, age {:d}, money {:.2f}".format('alex',18,97.8654)
print(msg)
msg = "i am {name:s}, age {age:d}".format(name='alex',age=18)
print(msg)

二.文件操作

三步骤:打开文件,得到文件句柄并赋值给一个变量;通过句柄对文件操作;关闭文件
open()函数打开文件时,如果不指定打开方式,会默认使用操作系统的,操作系统的是GBK,
因此用什么编码保存的就用什么编码打开。

1、文件模式有(默认文本模式):
r,只读模式(默认模式,文件必须存在,不存在则抛出异常)
w,只写模式(不可读,不存在则创建,存在则清空内容,本质是覆盖)
a,追加模式(不可读,不存在则创建,存在则追加内容,从光标最后位置往后写)
f = open('a.txt','w',encoding='utf8')      
f.write('5555')                   #write必须是字符串,并且只能有一个参数
f.writelines(['5555\n','6666\n']) #writelines 参数是列表且里边必须是字符串
f.close()

f = open('a.txt','r',encoding='utf8')
print(f.read())
f.close()

with open('a.txt','a',encoding='utf8') as f:
    f.write('aaaaaa\n')                

with open('a.txt','r',encoding='utf8') as f,\
        open('a.txt','w',encoding='utf8'):

2、非文本文模式(b模式)
b模式:b表示以字节方式操作(读,写和追加)
注:以b方式打开时,不能指定编码,读取的内容是字节类型,写入时也需提供字节类型。
rb,只读模式(默认模式,文件必须存在,不存在则抛出异常)
wb,只写模式(不可读,不存在则创建,存在则清空内容)
ab,追加模式(不可读,不存在则创建,存在则追加内容)
with open('a.txt','r',encoding='utf8') as f:
    data = f.read()
    print(data)

f = open('b.txt','wb')
 f.write('5555\n'.encode('utf-8')])                                         
f.writelines([bytes('6666\n',encoding='utf-8'),'5555\n'.encode('utf-8')])    
f.close()

字符串 ---encode---->bytes
bytes-----decode---->字符串

3、+同时读写某个文件
r+,读写,默认从开头开始,本质是覆盖
w+,写读,默认从开头开始,本质是覆盖
a+,写读,从光标最后位置往后写
f = open('a.txt','r+',encoding='utf8')
f.write('asdfg\n')                       
f.close()

f = open('a.txt','w+',encoding='utf8')
f.write('asdfg\n')                        
f.close()

f = open('a.txt','a+',encoding='utf8')
f.write('66666asdfg\n')                  
f.close()

4、文件操作的其他方式
with open('a.txt','r',encoding='utf8',) as f:
    data = f.encoding                            #打开源文件的编码方式     
    data = f.flush()                            #刷新文件
    data = f.tell()                                #获取当前光标所在的
    f.seek(3)                                    #移动光标的位置,以字符为单位
    data = f.read()
    print(data)

seek(10,0)    0:相对初始位置,默认从开头位置
seek(10,1)    1:相对上次光标所在的位置
seek(-10,2)    2:相对末尾,从末尾倒着移动光标,因此seek中是-10,
虽然倒着移动光标,但read()读取时仍然从光标位置往后读
当seek中是1和2时,必须是带b即b模式,末尾不用带encoding=''。
f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,
文件必须以写方式打开,但是w和w+除外(清空)

# 循环文件的推进方式
f = open('b.txt','rb')
for i in f:
    print(i)
找出文件的最后一行(节省内存):
f = open('日志文件','rb')
offs = -10
while True:
    f.seek(offs,2)
    data = f.readlines()
    if len(data)>1:
        print(data[-1].decode('utf8'))
        break
    offs*=2
f.close()
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值