python文件操作

本文详细介绍了文件的基本概念,包括文本文件和二进制文件的性质及优缺点。讨论了Python中字符串的编码与解码,以及文件的缓冲机制如何提高读写效率。还阐述了文件的打开、读取、写入和关闭等基本操作,并提到了文件编码的判断与处理。最后,文章通过实例展示了如何在Python中进行文件操作,包括使用with语句管理文件和处理编码问题。
摘要由CSDN通过智能技术生成

文件的基本概念

什么是文件

        文件是存放在外部介质 (如硬盘、U盘) 上的一组完整信息的集合。这些信息可为各种文字、 图形、图像、电影、音乐,甚至包括病毒程序等

两种重要的文件类型

文本文件(Text File)

        文本文件是可直接阅读的,使用记事本打开即可看到文件的内容。

二进制文件(Binary File)

        这类文件将数据按照它的进制编码的形式存储。如BMP,由 于这类文件内容是二进制编码,使用记事本打开是显然是乱码,BMP可用图片查看器解码

文本文件和二进制文件的优缺点

无论什么类型的文件,在硬盘/内存=> 二进制

  • 文本方式读:内存->看(转换)

  • 二进制方式读: 内存-> 看到一致

python3 字符串类型

  • bytes bytes --->b abc' 表示二进制

    • 转换:bytes->str :decode('utf8')

  • str

    • 转换: str->bytes:encode('utf8')

注意:encode编码时可指定任何合适的编码方式,但decode解码时,一定需要对应的编码方式

文件的缓冲机制

  • 读操作:不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据

  • 写操作:不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘

文件缓冲区

计算机系统为要处理的文件在内存中单独开辟出来的一个存储区间,在读写该文件时,做为数据交换的 临时“存储中转站” 。

缓冲机制的好处

能够有效地减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异, 提高数据读写的效率

文件的基本操作

访问文件操作过程

  1. 打开文件

  2. 读取文件

    • 将信息读到内存

  3. 写入文件

  4. 关闭文件

    • 保存文件并释放内存空间

常见编码

  • ASCII ---常见英文字符

  • Unicode ---万国码 只是给你一个编号,比如中文一个字在Unicode里面占两个字节但是在UTF - 8中占三个字节

  • UTF - 8 GBK ---是Unicode编码的具体实现方式,决定他在内存s中怎么去存储

  • UTF - 8 一个中文字符占三个字节

  • GBK国标码 ---一个中文占两个字节

>>> "中".encode("utf-8")
b'\xe4\xb8\xad'
>>> "中".encode("gbk")
b'\xd6\xd0'

判断文件编码-chardet模块

import chardet
str = "python".encode('gbk')
result = chardet.detect(str)
print(result)
输出:
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
#encoding的值显示为ascii,表示编码是ascii编码,由于gbk是属于ascii编码的一种,所以encoding的值就为ascii,后面的confidence是检测率,language是语言
​
#以什么方式加码就要以什么方式解码,不然会失败
>>> "中".encode("gbk").decode("gbk")
'中'
>>> "中".encode("gbk").decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
  • python2和python3的不同

    • python2的编码是ASCII码

    • python3的默认编码是UTF - 8

打开文件(open)

格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • file 要打开的文件名或路径

  • mode 打开文件的方式 => text, bytes

  • encoding 文件的编码方式

  • errors: 当发生编码错误时的处理方式

    • 'ignore'或'strict'(默认

  • buffering 缓存方式

文件的打开

  1. 读(r)

  2. 写(w)

    • 覆盖写,没有的话会新建文件

  3. 追加写(a)

    • 没有的话会新建文件

  4. 新建写入(x)

    • 文件如果有了的话会报错

  5. 带加号就是读写的方式r+,w+,a+

文件打开类型

文本类型\二进制类型

默认是以只读方式文本类型打开常见编码

文件的读取

 fp.read()

    • 只会从光标的位置开始读,读了一遍之后光标到最后,在读的话就都读不到内容

    • read读的字符数

  1. seek(偏移量,位置)

    • 定位光标位置,按照字节来的

    • 移动光标的位置,有两个参数,0表示开头,1表示当前2表示末尾,1和2只能在二进制条件下使用

  2. fp.readline()

    • 每一次读一行,无参数

    • 从光标位置读到行末

  3. fp.readlines()

    • 从光标位置读到文件末尾,把每一行作为一个元素存入列表,可以有参数

  4. fp.tell() 告诉你光标现在在哪个字节

for i in fp: 循环读取文件fp内的内容, 每次只读一行数据
fp.read(60000)  每次读60000个字符
fp.readlines(60000)  每次读60000个字符所在的所有行

文件的写入

f.write( )

fp.write 返回字符数,不是字节数

为什么不实时写入磁盘

硬盘是慢设备,频率读写会增大磁盘压力,产生瓶颈

什么时候真正写入磁盘

  1. 缓冲区满了

  2. 进程关闭

  3. 强制刷新 flush

    • fp.flush()强制将缓存中的数据刷新到磁盘中去

  4. 文件关闭 close

文件的关闭

f.close()

用with语句打开

#with 语句管理 with语句体中的内容执行结束可以自动释放与fp的链接
with open("sing","r") as fp:
    for i in fp:

文件对象其他方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值