day12-文件高级操作与指针控制

一、读相关操作
1、readline:一次读一行

with open(r'g.txt',mode='rt',encoding='utf-8') as f:
    # res1=f.readline()
    # res2=f.readline()
    # print(res2)

    while True:
        line=f.readline()         # 一次读一行的功能,等哪哪行内容长度为0就代表文件结束了。
        if len(line) == 0:
            break
        print(line)

2、readlines:

with open(r'g.txt',mode='rt',encoding='utf-8') as f:
    res=f.readlines()
    print(res)            # 一样是全读出来,一行一行的

强调:
f.read()与f.readlines()都是将内容一次性读入内存,如果内容过大会导致内存溢出,若还想将内容全读入内存


二:写相关操作

 f.writelines():
 with open('h.txt',mode='wt',encoding='utf-8') as f:
     # f.write('1111
222
3333
')

     # l=['11111
','2222','3333',4444]
     l=['11111
','2222','3333']
     # for line in l:
     #     f.write(line)
     f.writelines(l)   # 把l列表的内容全写到h.txt文件中,有换行则换行,没有就连续书写
with open('h.txt', mode='wb') as f:
    # l = [
    #     '1111aaa1
'.encode('utf-8'),
    #     '222bb2'.encode('utf-8'),
    #     '33eee33'.encode('utf-8')
    # ]

    # 补充1:如果是纯英文字符,可以直接加前缀b得到bytes类型
    # l = [
    #     b'1111aaa1
',
    #     b'222bb2',
    #     b'33eee33'
    # ]

    # 补充2:''.encode('utf-8') 等同于bytes('',encoding='utf-8')
    l = [
        bytes('上啊',encoding='utf-8'),
        bytes('冲呀',encoding='utf-8'),
        bytes('小垃圾们',encoding='utf-8'),
    ]
    f.writelines(l)
# 以上两种方式没有本质区别,只是简化了encoding的书写,因为英文的通用性

3、flush:
with open('h.txt', mode='wt',encoding='utf-8') as f:
f.write('哈')
# f.flush()    # 即时刷新,一般电脑会在一定量才刷新,减少io的使用量,合理使用资源,所以这个功能尽量不要使用


4、了解 (知道就好)
with open('h.txt', mode='wt',encoding='utf-8') as f:
print(f.readable())   #判断能不能读
print(f.writable())    #判断能不能写
print(f.encoding)  #解码方式是啥
print(f.name)  # 文件名称

# 上面这个没多大用,暂时基本不会用到


二、指针控制

指针移动的单位都是以bytes/字节为单位
只有一种情况特殊:
t模式下的read(n),n代表的是字符个数

with open('aaa.txt',mode='rt',encoding='utf-8') as f:
res=f.read(4)  #移动4个字符
print(res)


f.seek(n,模式):n指的是移动的字节个数


模式: (三种,0是开头,1是当前,2是末尾)
模式0:参照物是文件开头位置
f.seek(9,0)
f.seek(3,0) # 3

模式1:参照物是当前指针所在位置
f.seek(9,1)
f.seek(3,1) # 12

模式2:参照物是文件末尾位置,应该倒着移动
f.seek(-9,2) # 3
f.seek(-3,2) # 9

强调:只有0模式可以在t下使用,1、2必须在b模式下用

f.tell() # 获取文件指针当前位置


示范   (括号中的第一个参数是正数即向左数多少位,负数即向右数多少位,后面是参数物也就是模式是什么有三种0,1,2)
with open('aaa.txt',mode='rb') as f:
f.seek(9,0)
f.seek(3,0) # 3
# print(f.tell())
f.seek(4,0)
res=f.read()
print(res.decode('utf-8'))

with open('aaa.txt',mode='rb') as f:
f.seek(9,1)
f.seek(3,1) # 12
print(f.tell())


with open('aaa.txt',mode='rb') as f:
f.seek(-9,2)
# print(f.tell())
f.seek(-3,2)
# print(f.tell())
print(f.read().decode('utf-8'))

原文地址:https://www.cnblogs.com/xiao-zang/p/12505001.html