1. 打开文件open()
- 打开文件并以流对象返回
- 失败则提示IOError
1.1 准备工作
在任意磁盘下新建.txt文件,在文件里随便写点东西。例如:F:\OpenFileDemo.txt
1.2 open()方法的基本语法及常用参数
- file--------------------文件路径
- mode----------------文件权限
- encoding-----------以何种编码格式打开(默认:cp936)(常用:utf-8、gbk)
open(file, mode='r', buffering=-1, encoding=None,
errors=None, newline=None, closefd=True, opener=None) -> file object
1.3 mode的几种参数
权限 | 解释 |
---|---|
'r' | 只读方式打开文件(默认) |
'w' | 写入方式打开文件,会覆盖已存在的文件 |
'x | 文件存在,此方式打开会报异常 |
'a' | 写入方式打开,如果文件存在,则在末尾追加写入 |
'b' | 以二进制方式打开文件 |
't' | 以文本模式打开(默认) |
'+' | 可读写方式,(可添加到其它方式中使用) |
'U' | 通用换行符支持 |
1.4 open()使用实例
注意:
- \\ 转义
- encoding = ‘utf-8’ 别的报错,看情况
- 根据返回的流对象可查看基本参数情况
# 打开文件 获取流对象
Openfiledemo = open('F:\\OpenFileDemo.txt','r',encoding = 'utf-8')
Openfiledemo
# 基本参数情况
输出:<_io.TextIOWrapper name='F:\\OpenFileDemo.txt' mode='r' encoding='utf-8'>
2. 文件对象的几种常用方法
文件对象方法 | 执行操作 |
---|---|
f.close() | 关闭文件 |
f.read(size=-1) | 读取文件的size个字符,未给定或者负值,读取所有,并以字符串返回 |
f.readline() | 以写入方式打开,如果文件存在,则在末尾追加 |
f.write(str) | 将字符串str写入文件 |
f.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
f.seek(offset,from) | 在文件中移动文件指针,从from(0:起始,1:当前,2:末尾)偏移offset个字节 |
f.tell() | 返回当前在文件中位置 |
2.1 read()
- 别忘了 close() 关闭
- 注意:出现
' '
空,表示已经读取到文件末尾了,用seek()改变指针位置 - ()----括号内规定显示的长度,负数表示读取剩余所有字符
# 打开文件 获取流对象
Openfiledemo = open('F:\\OpenFileDemo.txt','r',encoding = 'utf-8')
#
Openfiledemo.read ()
# 返回文件内容
…………………………………………
# 打开文件 获取流对象
demo= open('F:\\OpenFileDemo.txt','r',encoding = 'utf-8')
#
demo.read (10)
# 返回文件内容
输出:'A:文字是人类用表意'
2.2 tell() 返回当前在文件中的位置(以字节码形式计算)
- 在UTF-8编码中:1中文占3个字节,1个中文标点占3字节。一个英文字符等于一个字节,英文标点占一个字节。
demo = open('F://OpenFileDemo.txt','r',encoding='utf-8')
demo.read(4)
'张三:文'
demo.tell ()
输出:12 # 四个中文字符,12个字节
2.3 seek(offset,from)改变指针位置
from:参数
- 0 开头
- 1 当前位置
- 2结尾
offset :参数
- 任意数字
- 不能处于单个字符中间 ,处于中间会报
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 0: invalid start byte
demo.seek (21,0)
21 # (19,20,22,23,都处于字符中间位置)
demo.read (-1)
输出:'张三:……'
2.4 readline () 显示当前行剩余的
demo.readline ()
输出:'李四:现代文字大……'
2.5 把文件转换成list/set/tuple等显示
- 如果行间有回车的话,会把每一行当成一个元素,中间用
,
隔开 - 根据前边的提示,用for循环,格式化输出文件
如下:
2.5.1 for()循环,格式化输出文件
低效率版
如下图
高效率版:直接用for循环遍历open()的对象
如下图:
2.6 write() 写入,
- 调用write()方法后,数据会存入缓存区里,必须flush(),或者close()后,文本才会被存入文本里
- write() 会返回写入字符个数
w权限,原文件会被覆盖
path = r'F:/OpenFileDemo.txt'
demo = open(path,'w',encoding='utf-8')
demo.write ('第③次添加\n')
输出 6
demo.flush()
代码:
写入文件:
a权限 -追加,文本不会被覆盖,在文件最后进行添加
代码:
写入到文件里