首页 > 编程语言 >Python中对open读取文件内容时的mode模式解析

Python中对open读取文件内容时的mode模式解析

时间:2023-07-04 16:24:04浏览次数:37  
标签:文件 Python 游标位置 mode 字符串 txt open

1.Python可以使用open函数来实现文件的打开,关闭,读写操作;

Python3中的open函数定义为:

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

其中mode列表为:

'r' #open for reading (default)
'w' #open for writing, truncating the file first
'x' #create a new file and open it for writing,python3新增
'a' #open for writing, appending to the end of the file if it exists
'b' #binary mode
't' #text mode (default),python3新增
'+' #open a disk file for updating (reading and writing)
'U' #universal newline mode (deprecated)

这里我们主要关心一下'r', 'w', 'a', 'r+', 'w+', 'a+', 'x',很多人容易混淆不同模式的读写操作

2.'r'

只读模式,open函数中mode参数的默认模式,文件不存在的话,报FileNotFoundError(python2是IOError);
文件打开后,初始游标位置为0;
每次读都是从游标位置开始读;
如果进行了写操作,会报如下异常:
io.UnsupportedOperation: not writable

3.'w'

只写模式,文件不存在的话,创建文件;文件存在的话,首先清空文件,然后开始写;
文件打开后,初始游标位置为0;
每次写都是从游标位置开始写;
如果进行了读操作,首先文件也会被清空,会报如下异常:
io.UnsupportedOperation: not readable

4.'a'

追加模式,文件不存在话,创建文件;文件存在的话,不会清空文件;
文件打开后,初始游标位置为文件结尾;
每次写都是从结尾开始写;
如果进行了读操作,同时报如下异常:
io.UnsupportedOperation: not readable

上面的比较好理解,下面就有点绕了

5.'r+'

读写模式,文件不存在的话,报FileNotFoundError(python2是IOError);
文件打开后,初始游标位置为0;
每次读写都是从游标位置开始;但是对于写操作,类似于替换操作;
看如下代码:
文件内容为:

abcdefg

代码内容为:

f = open('open_mode.txt', 'r+')
f.write('xyz')
f.close()

运行代码后,文件内容变为:

xyzdefg

6.'w+'

只写模式,文件不存在的话,创建文件;文件存在的话,首先清空文件;
文件打开后,初始游标位置为0;
每次读写都是从游标位置开始;写操作,类似于替换操作;

7.'a+'

追加模式,文件不存在话,创建文件;文件存在的话,不会清空文件;
文件打开后,初始游标位置为文件结尾;
每次写都是从结尾开始写;
读操作从游标位置开始;

8.'x'

python3新加
创建文件并写操作,操作必须是不存在的文件,如果操作的文件已存在,则报错FileExistsError
不可读,如果进行了读操作,同时报如下异常:

io.UnsupportedOperation: not readable

9.'b'

二进制形式读写文件;
写数据时,写入的数据类型必须为字符串类型,其他类型必须通过json(就是符合json格式的字符串)写入
python2与python3对于'b’ mode的行为不同,这和python2与python3的字符串类型有关;事实上,python的字符串类型有两种;
Python2的两种字符串类型,分别叫做str和Unicode,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。
Python2的两种字符串类型,分别叫做byte和str,与python2不同的是,byte实例包含原始的8位值;而str的实例,则包含Unicode字符。
当读写文件采用'b'的模式时,要求必须以二进制形式读写,在python2中,字符串必须为str字符串,python3中必须为byte字符串;所以在python3,'b'模式下这样读写字符串

s = b'hello world!' #注意是byte字符串
f = open('open_mode.txt','wb')
f.write(s)

或:

s = 'hello world!'f= open('open_mode.txt','wb')
f.write(s.encode(encoding='utf-8'))

不然会报如下错误:

Traceback (most recent call last):
File"C:/Users/Desktop/Python/cnblogs/数据类型.py", line 125, in f.write(s)
TypeError: a bytes-like object is required, not 'str'

read文本的相关方法

准备测试数据 test.txt

富强、民主、文明、和谐,
自由、平等、公正、法治,
爱国、敬业、诚信、友善。

python 读取文件的常用方法open()
读取的方法,有read(),readline(),readlines()

1.read()

read()方法是读取整个文件,将整个文件的内容放在一个字符串变量中.
这个方法的缺点就是当文件过大尤其是大于内存时,方法就失效了.

with open("test.txt", "r", encoding='UTF-8')as f:
    res = f.read()
    print(res)

直接输出文件里的所有内容

富强、民主、文明、和谐,
自由、平等、公正、法治,
爱国、敬业、诚信、友善。

2.readline()

readline()方法是每次只读取一行,并将读取的内容放在一个字符串变量中,缺点是这种方法比较慢.

with open("test.txt", "r", encoding='UTF-8')as f:
    res = f.readline()
    print(res)

执行的效果为

富强、民主、文明、和谐,

要想获取全部的内容,就需要自己手动循环了

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
with open("test.txt", "r", encoding='UTF-8')as f:
    while True:
        line = f.readline()
        if line:
            print(type(line), line)
        else:
            break

结果为

<class 'str'> 富强、民主、文明、和谐,
<class 'str'> 自由、平等、公正、法治,
<class 'str'> 爱国、敬业、诚信、友善。

3.readlines()

readlines()方法一次性读取整个文件,并自动将内容分析成一个行的列表:

with open("test.txt", "r", encoding='UTF-8')as f:
    res = f.readlines()
    print(res)

结果为

['富强、民主、文明、和谐,\n', '自由、平等、公正、法治,\n', '爱国、敬业、诚信、友善。']

去掉/n及分割

with open("test.txt", "r", encoding='UTF-8')as f:
    res = f.read()
    print(res)
    list = res.replace('\n', ',').split(',')
    print(list)

# 循环lines
with open("test.txt", "r", encoding='UTF-8')as f:
    lines = f.readlines()
    for line in lines:
        print(line)

标签:文件,Python,游标位置,mode,字符串,txt,open
From: https://www.cnblogs.com/xxpythonxx/p/17526045.html

相关文章

  • vscode python开发环境搭建
    vscode是微软开发的轻量级ide软件,有大量的插件,很适合python开发。以下简述vscode的python开发环境搭建步骤:一、官网下载vscode软件基于安全考虑软件下载最好到官网下载。vscode官网地址:https://code.visualstudio.com/download,到2023年7月4日最新版本为:VSCodeUserSetup-x64-1.......
  • python基础day37 基于TCP、UDP协议的套接字编程和粘包现象
    基于TCP协议的套接字编程(socket编程)什么是Socket?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCO/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信  套接字的分类:AF_UNIX:用在局域网中AF_INET:用在互联网中客户......
  • python中如何简洁剔除列表中的特定值
    在Python中,可以使用列表推导式或filter函数来剔除列表中的特定值。方法一:使用列表推导式original_list=[1,2,3,4,5]exclude_value=3new_list=[xforxinoriginal_listifx!=exclude_value]print(new_list)#输出:[1,2,4,5]方法二:使用filter函数origi......
  • pip安装python包到指定python版本下
    1.命令行进入到指定python安装目录。比如我电脑上有python3.8也有python3.9。准备给python3.9安装指定的包2.执行:python-mpipinstall包名......
  • python学习_转义字符
    一、什么是转义字符转义字符反斜杠(\),转义字符的表现形式:反斜杠+想要实现转义功能首字母如:\n:换行,n是newline的首字母    \r:回车,r是return的首字符,回车是光标回到当前行的开头位置    \t:水平制表符,t是tab的首字母(一个\t占4个空格)    \b:退格,b是ba......
  • 为控制器生成OpenAPI注释
    非常喜欢.NET的///注释,写代码的时候就顺道完成写文档的过程,简直不要太爽了。ASP.NETCORE也是一样的,通过Swagger工具,可以自动生成API的接口文档(OpenAPI规范),提供给前端使用,也可以用过APIPOST/APIFOX之类的工具提供给前端同学直接调用。生成OpenAPI注释只需要安装......
  • python如何操作读取excel表格数据之xlrd模块
    xlrd模块支持读取xlsx和xls两种格式的excel表格数据,使用之前需要先安装(可以通过pip安装) importxlrd#读取excel文件路径readfile=xlrd.work_bork(r'excel文件所在路径') #获取sheetsheet=readfile.sheet_names()obj_sheet=readfile.sheet_by_name('sheet1') #......
  • python中安装Mayavi的方法
    参考1:https://www.yisu.com/zixun/225865.html(python中安装pyqt4的方法)参考2:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4(python的lib库)参考3:http://www.manongjc.com/detail/64-fcfwoqunffxbskx.html(Windows+Python3.6安装Mayavi工具包(whl方法)......
  • Ubuntu源码编译安装Python3.8
    一、下载源码https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz二、编译参数--prefix:指定安装目录使用–prefix参数可以指定Python的安装目录,例如:./configure--prefix=/usr/local/python38这将把Python3.8安装在/usr/local/python38目录下。–enable-optim......
  • ❤️最详细的Python学习路线-图文不废话
            当谈论学习Python编程时,有许多不同的途径和资源可供选择。为了帮助你建立起一个学习Python的有效路线,下面是一个包含基本步骤和关键资源的建议。请注意,这只是一个指南,你可以根据自己的兴趣和学习风格进行调整。以下时间不适用于每一个人,但是学习路径以及思路方法却......