Python 文件操作

一.文件
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:?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值