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 :
- 读写都是以字符串(unicode)为单位
- 只能针对文本文件
- 必须指定字符编码,即一定要指定encodeing参数
b:
- 读写都是以bytes为单位
- 可以针对所有文件
- 一定不能指定字符编码,即一定不能指定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