Python知识——x、b模式、文件指针移动

x模式(了解)

只写模式「不可读;不存在就创建、存在就报错」


with open(r'D:\x模式',mode='xt',encoding='utf-8') as f:
    f.write('哈哈哈哈哈')

文件不存在时:
在这里插入图片描述

文件存在时:

Traceback (most recent call last):
  File "d:\python\study_6_9.py", line 29, in <module>
    with open(r'D:\x模式.txt',mode='xt',encoding='utf-8') as f:
FileExistsError: [Errno 17] File exists: 'D:\\x模式'

b模式(控制文件读写内容的模式)

t 模式与 b 模式的区别:

t :

  1. 读写都是以字符串(unicode)为单位
  2. 只能针对文本文件
  3. 必须指定字符编码,即一定要指定encodeing参数

b:

  1. 读写都是以bytes为单位
  2. 可以针对所有文件
  3. 一定不能指定字符编码,即一定不能指定encodeing参数

总结:
b模式更通用

用b模式读取图片文件

with open(r'D:\配送中心.png',mode='rb') as ret:
    f=ret.read()
    print(f)

用b模式写文本文件

with open(r'D:\text.txt',mode='wb') as f:
    f.write('哈哈哈'.encode('utf-8'))#需要手动添加编码模式

在这里插入图片描述

案例: 文件拷贝工具,任意文件都可以复制

old_files=input('请输入你要复制的文件地址:').strip()
new_files=input('请输入你要粘贴到的文件地址:').strip()
with open(r'{}'.format(old_files),mode='rb') as f,\
    open(r'{}'.format(new_files),mode='wb') as f2:
    for line in f:
        f2.write(line)

输出的结果:

请输入你要复制的文件地址:D:\配送中心.png
请输入你要粘贴到的文件地址:D:\text\配送中心.png

在这里插入图片描述

#循环读取文件
#方式一:自己控制每次读取的数据的数据量
 with open(r'test.txt',mode='rb') as f:
     while True:
         res=f.read(1024)#一次读取1024个字节
         if len(res) == 0:
             break
         print(len(res))

#方式二:以行为单位读,当一个内容过长时会导致一次性读入内容的数据量过大
 with open(r'test.txt',mode='rb') as f:
   for len in f:
       print(len(line),line)

文件操作的其他方法

一、读相关操作
1、readline( )
指定只读一行内容,配合while循环

with open(r'{}'.format(old_files),mode='rb') as f:
	while True:
	line=f.readline()
	if len(line) == 0:
		break
	print(line)

2、readlines( )
从当前起始位置读到末尾,并将其设置为列表

with open(r'D:\user_message.txt', mode='rt', encoding='utf-8') as f:
    ret = f.readlines()
    print(ret)

输出的结果

['lll:123\n', 'kkk:123\n']

注意:read( ) \ readlines( )都是将内容一次性读入内存,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方法:for循环 或者 while循环

二、 写相关操作
1、writelines( )
将列表里内容写入文本

with open(r'D:\user_message.txt', mode='wt', encoding='utf-8') as f:
    f.writelines(['111','222','333'])

在这里插入图片描述
2、flush:用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

文件指针移动

指针移动的单位都是以字节为单位

只有一种情况特殊:t模式下的read(n),n代表字符的个数

with open(r'D:\user_message.txt', mode='rt', encoding='utf-8') as f:
    ret=f.read(6)
    print(ret)
一共有7个字

seek( n,模式):n是指指针的移动的字节个数
模式:
0,参照物是文件开头位置 只有0模式可用在 t 模式
1、参照物是当前指针所在位置 必须在b模式使用
2、参照物是文件末尾位置 、n应该为负数 必须在b模式使用

tell( ) 获取文件指针位置

with open(r'D:\user_message.txt', mode='rt', encoding='utf-8') as f:
    f.seek(3,0)
    res=f.tell()
    ret=f.read()
    print(ret)
    print(res)
共有7个字符
3
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值