一.文件
1.文本文件:
- 存储普通’字符’文本,python中默认为Unicode字符集
- 可使用记事本打开
- word软件编辑的文档不是文本文件
2.二进制文件:
- 把数据内容用字节进行存储
- 无法用记事本打开,必须使用专门的软件解码
- 包括:MP4视频文件,MP3音频文件,JPG图片,DOC文档
二.文件的操作方法
#注意:
1.除read方法外,其他方法长度单位均为byte
2.python中自动将windows中的换行符\r\n处理显示成\n
1.打开文件:
打开文件:[<f>=]open(<file>[,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True])
#创建1个file object,相关的方法才可以调用该对象进行各种操作
#参数说明:
file:指定要打开的文件;为str
mode:指定打开文件的模式;为str(可取值见下图)
buffering:若为为0,就不会有寄存
若为1,访问文件时会寄存行
若为大于1的整数,表明了这就是的寄存区的缓冲大小
若为负值,寄存区的缓冲大小则为系统默认
encoding:指定编码方式;为str,默认使用当前系统的编码方式
b模式创建二进制文件
非b模式创建文本文件
b模式不进行解码,不指定编码方式
2.f.close():关闭文件流
- 由于文件底层由操作系统控制,打开的文件对象必须显示调用close()关闭
- 调用close()时,首先会把缓冲区数据写入文件(也可使用flush()),再关闭文件,释放文件对象
- 为保证打开的文件对象正常关闭,一般结合异常机制的finally/with语句实现无论何种情况都能关闭文件对象
try:
f=open('a.txt','a')
f.write('adsfghjk')
except Exception as e:
print(e)
finally:
f.close()
4.f.detach():?
5.f.fileno():返回一个整形的文件描述符,可以用在如os模块的read函数等一些底层操作上
6.f.flush():刷新
- 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入
- 修改后保存在内存,需刷新保存至外存
7.f.isatty():判断是否是终端设备
8.file.read(size):读取文件指定大小的内容
- size决定返回的大小(单位为字符),默认返回整个文件
- 如果文件大小>2倍内存则有问题
- f.read()读到文件尾时返回空字串
- 只读取当前光标位置之后的内容
9.file.readline():返回一行
10.file.readlines([size]):返回包含size行的list(每个元素为一行内容构成的str), size 未指定则返回全部行
- read(line(s))读取从光标所在位置开始
f=open("文件名","rb")
for i in f:#如果为for i in f.readlines():需先全部加载进内存,占用内存高
offset=-10
while True:
f.seek(offset,2)
data=f.readlines()
if len(data)>1:
print("文件的最后一行是:%s"%(data[-1].decode("utf-8")))
break :用来移动文件指针。
```python
偏移量: 单位为字节,可正(往后)可负(往前)
起始位置:0(文件头),默认值;1(当前位置);2(文件尾)
非b模式下只能使用0
13.f.seekable():是否可移动光标
14.f.tell():返回一个整数,表示当前文件光标位置(即到文件头的字节数)—每行还有回车符\r\n占2bytes
15.f.truncate(size):截断文件,返回截断的字节长度
- 指定长度(以B为单位),就从文件的开头开始截断指定长度,其余内容删除;不指定长度,就从文件开头开始截断到当前位置,其余内容删除
- 这个函数在r+模式下服从先读后写:截断后,本次读取流不受影响,close()时会重写本文件进行截断;所以截断后还可打印,tell()返回值不变
16.f.write(“hello\n”):写入数据,返回写入的数据的字节长度
- 如果要写入字符串以外的数据,先将他转换为字符串
- 默认不添加换行符,必须手动在str中加入
17.f.writelines([“hello\n”]):写入列表内信息,写入的仍是str
- 默认不添加换行符,必须手动在str中加入
18.f. _ class _:?
19.f._ del_(*args,**kwargs):?
20.f._ delattr_(*args,**kwargs):?
21.for line in f:通过迭代器访问
三.文件的属性
f.buffer:文件在读取操作时使用的缓冲策略
0:代表buffer关闭(只适用于二进制模式)
1:代表line buffer(只适用于文本模式)
>1:表示初始化的buffer大小
f.closed:文件是否处于关闭状态
f.encoding:文件的编码方式
f.errors:?
f.line_buffering:?
f.mode:文件的打开模式
f.name:文件名
f.newlines:?