Python open函数使用详解

《网络安全自学教程》

在这里插入图片描述

open() 可以打开一个文件,并返回文件对象。

语法

open( name, mode )

参数

  • name:(必选)文件名,支持绝对路径和相对路径
  • mode:(可选)文件打开的模式,默认是 r 只读模式
  • encoding:(可选)指定字符集编码,默认None
  • errors:(可选)编码错误处理方式,常用的值有 ignore:忽略错误,replace:用?替换无法解析的字符。
  • buffing:(可选)设置缓冲区大小

返回值

  • 返回文件对象

1、打开文件

open() 打开的文件,必须使用 close() 关闭。

使用相对路径,打开同级目录下的文件,文件名可以自动补全

file = open('myFile')
print(file)

file.close()

输出:

<_io.TextIOWrapper name='myFile' mode='r' encoding='cp936'>

使用绝对路径,必须用斜杠 /,不能用反斜杠 \

file = open('E:/data/PrCharm/pythonProject1/myFile')
print(file)

file.close()

2、文件打开模式

mode 参数可以设置文件打开的模式,共有16中模式,可以简化为四大类

  • r:读(只读不写)
  • w:写(只写不读)
  • a:追加(只写不读)
  • x:创建文件(只写不读)
模式描述
r只读模式(默认)
r+读写模式,文件不存在会报错
t文本模式
x写模式,创建文件,文件已存在会报错
w写模式,文件存在则打开(原内容删除),文件不存在则创建
w+读写模式,文件存在则打开(原内容删除),文件不存在则创建
+更新模式,可读可写
b二进制模式
rb二进制只读模式,常用于图片等非文本
rb+二进制读写模式,常用于图片等非文本
wb二进制写模式,文件存在则打开(原内容删除),文件不存在则创建
wb+二进制读写模式,文件存在则打开(原内容删除),文件不存在则创建
a追加模式,文件存在则打开(保留原内容),文件不存在则创建
ab二进制追加模式,文件存在则打开(保留原内容),文件不存在则创建
a+读写模式,文件存在则打开(保留原内容),文件不存在则创建
ab+二进制读写模式,文件存在则打开(保留原内容),文件不存在则创建
U换行模式(已弃用)

接下来,我们演示一下常用模式的作用

2.1、创建文件

在当前目录创建文件,并写入内容

file = open('myFile', mode='x')
file.write('fist line hello python \n')
file.write('second line hello python \n')
file.write('third line hello python \n')

file.close()

当前目录会多出一个myFile文件,里面显示我们写入的内容

在这里插入图片描述

2.2、读取文件内容

读取文件内容常用的操作有:

  • file.read():读取全部内容
  • file.read(5):读取5个字节
  • file.readline():读取一行

需要注意的是,读取文件时,指针是从文件开头往后移动的,我们只能按照字符顺序读取并且不能重复读取。

比如,先读取全部内容,再读取一行内容,会发现读不到了,因为指针已经移动到文件末尾了,无法再向后移动了。

file = open('myFile', mode='r')
print('全部读取 \n', file.read())
print('读取一行 \n', file.readline())

file.close()

输出:

全部读取 
 fist line hello python 
second line hello python 
third line hello python 

读取一行 

2.3、写入文件

我们向 2.1 创建的文件里面,写入一行内容。

file = open('myFile', mode='w')
file.write('fourthly line hello python \n')

file.close()

会发现,内容被覆盖了,实际上这不是覆盖;写模式打开文件时,会清空文件原来的内容。

在这里插入图片描述

想保留原来的内容,可以用追加模式

file = open('myFile', mode='a')
file.write('fourthly line hello python')

file.close()

再看文件,原来的内容没有删除

在这里插入图片描述

3、中文编码错误

打开中文文件时,如果不指定字符集编码,会报错 UnicodeDecodeError: ‘gbk’ codec can’t decode byte

在这里插入图片描述

需要使用 encodiing 参数设置字符集,比如utf8

file = open('myFile', encoding='utf8')
print(file.read())

file.close()

输出:

中文内容

提示:大部分文件编码都是utf8,为了避免编码问题,可以在打开文件时,手动设置 encoding=‘utf8’

可以使用errors参数设置编码错误的处理方式。

比如:ignore,忽略错误,程序继续执行,但无法解析的字符会打印乱码

file = open('myFile', errors='ignore')
print(file.read())

file.close()

输出:

涓鏂

或者:replace,用?替换无法解析的字符

file = open('myFile', errors='replace')
print(file.read())

file.close()

输出:

涓�鏂�

4、缓冲区

buffing 参数可以设置缓冲区大小:

  • 0:或者False,表示不使用缓冲区
  • 大于1:指定缓冲区的大小(单位字节)
  • 负数:使用默认的缓冲区大小

使用open() 打开文件时,建议不修改 buffing 参数的值,也就是打开缓冲区并保持默认大小。

因为,计算机内存的I/O速度远高于计算机外设(鼠标、键盘、硬盘等)的I/O速度,如果不适用缓冲区,内存和外设就必须同时进行读写操作。也就是说,内存必须等待外设输入(输出)一个字节之后,才能再次输出(输入)一个字节。这会让内存中的程序大部分时间都处于等待状态。

而使用缓冲区,程序就会将数据都输出到缓冲区,然后执行其他操作,然后由外设去缓冲区读取数据,内存和外设就不用同步操作了。

为了在Windows上安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows上安装了ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows下安装使用ADB,简单易懂教程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值