首页 > Python资料 博客日记
python内置open函数详解
2024-10-14 05:00:05Python资料围观34次
在Python中,open() 函数可以说是最常用的函数之一了,被用来读写文件。文件可以是文本文件和二进制文件,open函数打开文件并返回一个文件对象,主要提供了一些常用的读写方法,如read(),readline(),readlines(),write(),writelines(),seek()等,当操作结束后使用close()方法关闭文件对象,释放资源。
1 open函数参数介绍
open函数的参数
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
1)file:传入不带路径的字符串(文本文件/二进制文件)或者带有绝对路径或者相对路径的文件。如果传入的文件不存在,默认会创建文件。
如果传入的文件不合要求,会报错如下:
2)mode:指明文件打开模式的可选字符串。默认为‘r’表示以文本模式读取。
字符 | 含意 |
'r' | 只读取(默认);文件必须存在,否则会报错。 |
'w' | 只写入,是覆盖式写入(比如第一次写入后,再次打开以w方式写入会覆盖原内容。) |
'x' | 排它性创建,如果文件已存在则失败。如果文件不存在则创建,模式为写入,与'w'类似。 |
'a' | 只写入,再次打开文件并不会覆盖,而是在末尾追加写入。 |
'b' | 表示二进制模式读取和写入,,不能单独使用,须与'r','w','a','x'配合使用。 |
't' | 文本模式(默认),与'r','w','a','x'配合使用。 比如'r'与'rt'同义,一般直接使用'r'。 |
'+' | 打开用于更新(读取与写入),不能单独使用,须与'r','w','a','x'配合使用。 |
以上模式结合使用:
a. 只读取:'r',’rb’
b. 只写入:'w',’wb’,’a’,’ab’,'x','xb'
c. 读取和写入:'r+',’r+b’,'w+',’w+b’,’a+’,’a+b’,’x+’,’x+b’
- 'r+':以读写模式打开文件,文件指针会放在文件的开头。
- 'w+':以读写模式打开文件,原文件内容会被删除。(慎用)
- 'a+':以读写模式打开文件用于追加,文件指针会放在文件的末尾(表现为以a+模式打开文件直接读取内容,读取的内容为空)。
在读取和写入模式下我们可以使用seek()方法来移动文件指针到指定位置,以便在文件的任意位置进行读写操作。
3)buffering:参数可选,表示设置缓冲策略,默认为None。0表示无缓冲(仅适用于二进制模式),大于0表示缓冲区的大小(以字节为单位)。
4)encoding:参数可选,默认为系统默认编码(在Python 3中通常是UTF-8);在文本模式下可以指定编码,在二进制模式下不需要指定编码。
5)errors:参数可选,指定编码和解码错误的处理方式。默认为None,跟值'strict'效果一样,表示严格处理错误,其他值如'ignore'用于忽略错误、'replace'替换一些错误标记等。
5)newline:参数可选,用于控制文件读取和写入时行的结束符。默认为None,表示使用系统默认的行结束符,比如'\r\n','\n'。在文本模式下读取文件时,默认把平台特定的行结束符(Unix 上为 \n, Windows 上为 \r\n)转换为 \n。在文本模式下写入数据时,默认把 \n 转换回平台特定结束符。
6)closefd:参数可选,closefd默认为True表示当文件对象被关闭时,同时关闭文件描述符,防止资源泄漏。当closefd为False指当文件对象被关闭时,不关闭文件描述符。当file参数传入的是文本文件时,该参数必须为Ture,否则会报错。
2 常用方法介绍
1)读取方法
- read(size=-1):从文件中读取并返回指定数量的字符或者字节,如果不指定size则读取并返回文件的全部内容。每次读取后文件指针会移动到所读内容的最后位置。
- readline(size=-1):从文件中读取并返回一行(直到换行符 \n),或返回指定数量的字节。
- readlines(hint=-1):读取所有行并返回列表,其中每一行都是一个字符串。如果指定了 hint,则读取指定数量的字符或者字节。
2)写入方法
- write(str):将字符串或字节写入文件,只写入一行,并且不会在末尾添加换行符,需要自己添加。
- writelines(lines):向文件写入一个字符串或者字节列表,可写入多行,并且不会在末尾添加换行符,需要自己添加。
3)移动文件对象指针位置
- seek(offset, whence=0):移动文件读取指针到指定位置。offset 是指从 whence 指定的位置开始计算的字符或者字节数。whence 的值为 0(文件开头,默认值)、1(当前位置)或 2(文件末尾)。
- tell():返回文件当前的指针位置。
4)关闭文件对象
close():关闭文件对象。
5)其他方法
flush():将缓冲区的内容写入文件,但不关闭文件。
fileno():返回文件的描述符(一个小的非负整数)。
isatty():如果文件是一个与终端设备(tty)相关联的,则返回 True,否则返回 False.
readable()、writable()、seekable():分别用于检查文件是否可读、可写、以及是否支持 seek() 操作。
truncate(size=None):截断文件到指定大小。如果 size 未指定,则截断文件到当前位置。如果当前位置大于文件大小,则文件将被扩展,并且扩展部分的内容将用零字节填充。
3 常用属性介绍
- name 属性:返回打开文件的名称。
- closed 属性:返回一个布尔值,指示文件是否已关闭。当文件被成功打开时,closed 属性为 False。一旦文件被关闭,closed属性为True。
- mode属性:返回open函数传入的mode值。
- encoding属性:返回open函数使用的编码。
- buffer属性:返回open函数的buffer配置。
- errors属性:返回open函数的errors配置。
4 示例介绍
1)打开空文本文件,并追加写入,然后读取文件内容。
mode传入‘a’追加写入:
fs = open('config1.txt','w')
fs.write('hello python!\n')
fs.write('hello world!\n')
print(f'文件是否关闭:{fs.closed}')
fs.close()
print(f'文件是否关闭:{fs.closed}')
结果:
文件是否关闭:False
文件是否关闭:True
mode传入‘r’,只读文件:
fs = open('config1.txt','r')
print(f"read() 读取结果:{fs.read()}")
fs.close()
结果:read()函数读取为字符串。
read() 读取结果:hello python!
hello world!
2)打开空二进制文件,覆盖写入,然后读取内容。
mode分别传入‘wb’和‘rb’
fs = open('config1.txt','wb')
fs.writelines([b'hello python!\n',b'hello world!\n'])
fs = open('config1.txt','rb')
print(f"readlines() 读取结果:{fs.readlines()}")
fs.close()
结果:
readlines() 读取结果:[b'hello python!\n', b'hello world!\n']
3)打开存在的文件内容,可进行读写操作,并使用seek移动文件指针位置。
mode传入‘a+’,使用上面写入的文件。
fs = open('config1.txt','a+')
#‘a+’模式 文件打开后,指针会移动到末尾。我们先打印看下
print(f"打开后文件指针位置 :{fs.tell()}")
#移动到从开头算第3个位置,
fs.seek(2)
print(f"移动后 文件指针位置 :{fs.tell()}")
print(f'readline() 从指针位置开始读取第一行内容为:{fs.readline()}')
#然后在末尾插入一个字符‘e’
fs.write('e')
#因为位置已经移到末尾 所以以下打印内容为空
print(f"readlines() 读取结果:{fs.readlines()}")
fs.seek(0)
#重新移动指针位置到第0个字符,然后打印
print(f"readlines() 重新移动后读取结果:{fs.readlines()}")
fs.close()
结果:
打开后文件指针位置 :26
移动后 文件指针位置 :2
readline() 从指针位置开始读取第一行内容为:llo python!
readlines() 读取结果:[]
readlines() 重新移动后读取结果:['hello python!\n', 'hello world!e']
5 使用with....as上下文管理器,不需要每次执行close函数
举例:使用with.......as语句打开文件,当操作结束后,会自动close文件对象。
with open('/Users/htsc/Desktop/config1.txt','r+') as fs:
print(f'readline() 从指针位置开始读取第一行内容为:{fs.readline()}')
print(f'fs.closed :{fs.closed}')
#结果:
readline() 从指针位置开始读取第一行内容为:hello python!
fs.closed :True
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习和关注,谢谢大家。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj