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

这篇具有很好参考价值的文章主要介绍了Python中对open读取文件内容时的mode模式解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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及分割文章来源地址https://www.toymoban.com/news/detail-518662.html

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中对open读取文件内容时的mode模式解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】使用Python读取JSON文件中的内容

    在自动化测试过程中,会将部分数据保存到JSON文件中。 JSON文件有以下特点: JSON是存储和交换文本信息的语法,类似XML。 JSON比XML更小、更快、更易解析 JSON是轻量级的文本数据交换格式。 JSON是轻量级的文本数据交换格式。 JSON独立于语言 JSON具有自我描述性、更易理解。

    2024年02月13日
    浏览(49)
  • python h5py(h5文件) 文件内容读取

    原文链接: python h5py(h5文件) 文件内容读取 上一篇: Python 键盘按键监听 截取全屏 百度ai通用文字识别 下一篇: 数字中1的个数 循环判断 位与 查表法 二次查表法 使用递归函数显示文件数据结构 如果有value属性,表示该数据为值,打印出来,如果没有则表示数据为组group,继续递

    2023年04月09日
    浏览(27)
  • python读取pdf、doc、docx、ppt、pptx文件内容

    使用python读取文件,其中pdf、docx、pptx可以直接读,.ppt和.doc文件不能直接读,需要转换成.pptx和.docx文件,并且需要区分系统 如果是linux系统,请先安装组件 python代码如下:

    2024年02月11日
    浏览(48)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件

    一 读取excel内容、并放入字典 1 读取excel文件 2 读取value,舍弃行号 3 读取为字典 一 读取excel内容、并放入字典(完整代码) 二、将字典内容写入 excel文件 1 假设已有字典内容为: 即student列表里有4个字典, 第一个字典里面有3对key-value \\\"num\\\": 1, \\\"name\\\": \\\"cod1\\\", \\\"wfm\\\": 0.1 2 导入Workb

    2024年02月04日
    浏览(47)
  • python如何读取parquet文件中的每一行每一列内容

    引言 Parquet是一种列式存储格式,主要用于大规模数据处理。它具有高效的压缩比和快速的读取性能,因此在处理大型数据集时非常有用。Python提供了多种方法来读取和处理Parquet文件,本文将介绍如何使用Python读取Parquet文件中的每一行每一列内容。 准备工作 在开始之前,我

    2024年02月04日
    浏览(49)
  • python读取.txt文件中某些关键字后面的内容 并根据该数据画图

    感谢一下悦姐帮忙 然后画图,其实两个代码可以放在一个里面 最后贴个图:

    2024年02月09日
    浏览(42)
  • python使用工厂模式和策略模式实现读文件、分析内容功能

    当涉及到在 Python 中创建类以及使用设计模式来实现读取文件和分析内容的功能时,我们可以考虑使用工厂模式和策略模式的结合。下面是一个简单的示例,演示如何通过创建类和使用设计模式来实现这一功能: 在上面的示例中,我们首先创建了一个 `AnalysisFactory` 类作为工厂

    2024年02月20日
    浏览(47)
  • Python结合openpyxl库读取xlsx文件的每一行或每一列的内容进行处理

    openpyxl库是一个很好处理xlsx的python库。接下来,我主要介绍我是如何通过python代码读取xlsx的每一行或每一列的内容的。 一般xlsx第一列都是数据的字段,所以后续处理需要的话,还是先读取这一行再说 如果要看某一列的数据 例如

    2024年02月11日
    浏览(54)
  • 利用Python的csv(CSV)库读取csv文件并取出某个单元格的内容的学习过程

    csv库在python3中是自带的。 利用它可以方便的进行csv文件内容的读取。 注意:要以 gbk 的编码形式打开,因为WPS的csv文件默认是 gbk 编码,而不是 utf-8 。 表头为第1行,现在要读取并打印出第2行的内容,并附加上表头信息的代码如下: 运行效果如下: 如果要读取第3行的内容

    2024年01月16日
    浏览(43)
  • git 拉取代码时会显示 mode change,但实际文件内容并未改变, 这种情况怎么解决

    自己遇到这种问题的场景主要有两个: 一个是git拉取下来代码之后,再次commit的时候遇到这个情况; 另一个是自己从一台电脑复制包含 .git/ 文件夹到另外一台电脑之后,再次commit的时候遇到这个情况。 终端提示的内容: 出现这种提示的主要原因是文件权限的变化。 对于

    2024年02月17日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包