阿宁的Python学习-----文件与IO

文件操作

冯诺依曼体系架构
在这里插入图片描述

  • 运算器:用于完成各种算术运算、逻辑运算和数据传送等数据加工处理。

  • 控制器:用于控制程序的执行,是计算机的大脑。

  • 运算器和控制器组成计算机的中央处理器(CPU)。控制器根据存放在存储器中的指令序列(程序)进行工作,并由一个程序计数器控制指令的执行。控制器具有判断能力,能根据计算结果选择不同的工作流程。

  • 存储器:用于记忆程序和数据,例如:内存。程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。

  • 输入设备:用于将数据或程序输入到计算机中,例如:鼠标、键盘。

  • 输出设备:将数据或程序的处理结果展示给用户,例如:显示器、打印机。

一般的IO操作,指的是磁盘的I/O

Input / Output

文件IO常用操作

函数/方法功能
open(file_path,mode=“r”,encoding=“gbk”)打开文件
read(n)读取
write(string)写入
close()关闭文件
readline()单行读取
readlines()多行读取
writelines(list)写入多行
seek(0,2)文件光标操作
tell()光标位置

打开文件

open(file_path,mode=‘r’,encoding=None)

f = open("test")  # file_object 
print(f.read())
f.close()
  • 文件的访问有两种模式
  • 文本模式和二进制模式。
  • 不同模式下,操作函数的结果是不相同的。
打开模式
描述字符意义
r默认模式,表示只读打开
w只写打开
x创建并写入一个新的文件
a写入模式,如果文件存在,则追加
b二进制模式
t默认文本模式
+读写打开一个文件(增强r a w)
  • r是只读
  • wxa都是只写,都可以产生新的文件
  • 文本模式t:字符流,有编码按照字符串处理。
  • 二进制模式b:将文本按照字节理解,与字符编码无关,二进制操作时,字符使用bytes类型
f = open("test2","wb")
s = f.write("人通教育".encode())
print(s)
print(type(s))
f.close()

f = open("test2","rb")
s = f.read()
print(type(s))
print(s)
f.close()

文件光标(指针)

  • 光标指向字节的位置

mode = “r”,指针起始在0

mode = “a”,指针位置在EOF(末尾)

tall() 显示指针的当前位置

seek(offset[,whence]) 跳转到某个位置

​ seek(0) --> 文件开头

​ seek(10) --> 开头数第10个字节位置

  • whence 0 默认值,表示从头开始,offset只能正整数
  • whence 1 表示从当前位置开始,offset只接受0 seek(0,1)
  • whence 2 表示从文件结尾开始 seek(0,2) 从结尾开始
encoding:编码,仅文本模式使用

None表示使用默认编码

  • windows默认使用GBK (cp936)
  • linux下默认使用UTF-8

其他参数

  • errors :什么样的编码错误将被捕获
    • None和strict表示编码错误将抛出ValueError异常;
    • ignore表示忽略
  • newline:文本模式中,换行的转换
    • None 表示’\n’ ‘\r’ ‘\r\n’ 都可以换行
    • \r
    • \n
    • \r\n
  • closefd:关闭文件描述符,True表示关闭它。

其他

seekable() 是否可seek

readable() 是否可读

wirtable() 是否可写

colsed() 是否关闭

上下文管理

# 文件是不能无限打开的
lis = []
for i in range(10000):
    lis.append(open("test"))
print(len(lis))

上下文管理:一种特殊的语法,交给解释器去关闭文件、释放资源、断开网络连接.

with open("test") as f:
	print(f.read())

StringIO

  • io模块中的类
    • from io import StringIO
  • 内存中,开辟的一个文本模式的buffer(缓冲区),可以向对文件操作一样操作它
  • 当close方法被调用时,这个buffer会被释放
from io import StringIO
# 向操作文件一样操作内存
sio = StringIO()  
sio.write("123")
print(sio.getvalue()) # 无视指针输出所有内容
sio.close()
  • 好处
    • 一般来说,磁盘的操作比内存操作要慢的多,内存足够的情况下,使用磁盘IO可以大大提高程序的运行效率。

BytesIO

  • io 模块中的类
    • from io import BytesIO
  • 内存中,开辟一个二进制的buffer,可以向文件一样操作它
  • 当close方法被调用的时候,这个buffer会被释放。
  • 使用方法同StringIO一样

内存足够的情况下,使用磁盘IO可以大大提高程序的运行效率。

BytesIO

  • io 模块中的类
    • from io import BytesIO
  • 内存中,开辟一个二进制的buffer,可以向文件一样操作它
  • 当close方法被调用的时候,这个buffer会被释放。
  • 使用方法同StringIO一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值