【python3基础学习】【第3周】文件操作

本文详细介绍了Python3中文件操作的基础知识,包括不同模式(r、r+、a、a+、w+等)下的读写操作,以及二进制模式(rb、wb)的应用。重点讲解了read()、readline()、readlines()方法的区别,文件指针的使用,如tell()、seek()、flush()和truncate()方法,强调了在读写文件时内存消耗和效率的考虑。此外,还讨论了with语句在文件操作中的作用。
摘要由CSDN通过智能技术生成

文章目录


前言

首先要知道,对文件操作基本流程:
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件

文件操作方法注释等更多详情,可参考:alex大王第二周博客


打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【不可读;不存在则创建;存在则只追加内容;】
  • 附:mode 的值包括 ‘r’ ,表示文件只能读取;‘w’ 表示只能写入(现有同名文件会被覆盖);‘a’ 表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾。‘r+’ 表示打开文件进行读写。mode 实参是可选的,省略时的默认值为 ‘r’。
  • 通常,文件以 text mode 打开,即,从文件中读取或写入字符串时,都以指定编码方式进行编码。如未指定编码格式,默认值与平台相关 (参见 open())。在 mode 中追加的 ‘b’ 则以 binary mode 打开文件:此时,数据以字节对象的形式进行读写。该模式用于所有不包含文本的文件。
  • 在文本模式下读取文件时,默认把平台特定的行结束符(Unix 上为 \n, Windows 上为 \r\n)转换为 \n。在文本模式下写入数据时,默认把 \n 转换回平台特定结束符。这种操作方式在后台修改文件数据对文本文件来说没有问题,但会破坏 JPEG 或 EXE 等二进制文件中的数据。注意,在读写此类文件时,一定要使用二进制模式。

“+” 表示可以同时读写某个文件

  • r+,读写文件【1. 无法新建文件 2. 可读;可覆盖写;可追加写】
  • w+,写读文件【1. 可以新建文件 2. 可读;可覆盖写;】
  • a+,追加写文件【1. 可以新建文件 2. 可读;可追加写】
  • "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
  1. rU
  2. r+U

总结:
在这里插入图片描述

# lyrics.txt原文:
这天,酒店老板正在大厅巡视。
来了一乞丐上前说道:“老板给个牙签行吗?”
老板给他一个打发走了。
一会儿,又来一个乞丐,也是来要牙签的。
老板心想现在这乞丐怎么不要饭改要牙签了?
也同样给他一个打发走了,没过多旧,又来一个乞丐。
老板对他说:“你也是来要牙签的吗?”
乞丐说:“有个人吐了,可我晚了一步,已经被前面两个乞丐把能吃的都吃了,现在只剩下汤了。你能给我个吸管吗?

一、文件基本操作 — r读模式

  • 文件读取规则:文件维护着类似指针一样的东西,文件打开时,指针会处于文件开始位置,文件首次读取时(首次调用read方法时),会从头开始一行一行读取,读取到哪个地方,指针就会移动到哪个地方,指针除非调用seek方法移回去,否则不会自动回到开始位置!!!

1. read()方法(只适合读小文件)

  • read方法会从当前位置读取整个文件剩余内容,按照str类型,返回读取内容
  • 根据文件读取规则,首次读取时,文件指针会移动到文件尾部,如果第二次读取前没有使用seek方法移动文件指针,则第二次读取内容为""
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

if __name__ == '__main__':
    f = open(file=r'D:\Codes\s14_python3\file_operation_learning\lyrics.txt',
             mode="r",
             encoding="utf-8")
    first_read = f.read()
    print("-----first_read-----%s, %s" % (type(first_read), first_read))

    second_read = f.read()
    print("-----second_read-----%s, >>>%s<<<" % (type(second_read), second_read))

    f.close()  # 关闭文件

# 输出:
-----first_read-----<class 'str'>, 这天,酒店老板正在大厅巡视。
来了一乞丐上前说道:“老板给个牙签行吗?”
老板给他一个打发走了。
一会儿,又来一个乞丐,也是来要牙签的。
老板心想现在这乞丐怎么不要饭改要牙签了?
也同样给他一个打发走了,没过多旧,又来一个乞丐。
老板对他说:“你也是来要牙签的吗?”
乞丐说:“有个人吐了,可我晚了一步,已经被前面两个乞丐把能吃的都吃了,现在只剩下汤了。你能给我个吸管吗?
-----second_read-----<class 'str'>, >>><<<

2. readline()方法

  • 每次只读一行,并以str类型返回
  • 根据文件读取规则,首次读取时,文件指针会移动到第二行首,第二次读取前如果没有使用seek方法移动文件指针,第二次使用readline方法读取内容为第二行内容
  • 如果想要读取多行,可以使用循环
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

if __name__ == '__main__':
    f = open(file=r'D:\Codes\s14_python3\file_operation_learning\lyrics.txt',
             mode="r",
             encoding="utf-8")
    first_line = f.readline()
    print(type(first_line), first_line)
    second_line = f.readline()
    print(type(second_line), second_line)

    f.close()  # 关闭文件

# 输出:
<class 'str'> 这天,酒店老板正在大厅巡视。

<class 'str'> 来了一乞丐上前说道:“老板给个牙签行吗?”

3. readlines()方法(只适合读小文件)

  • 将文件内容全部读出,并以list方式返回
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

if __name__ == '__main__':
    # 打开文件
    f = open(file=r'D:\Codes\s14_python3\file_operation_learning\lyrics.txt',
             mode="r",
             encoding="utf-8")
    # 读取文件
    lines = f.readlines()
    print(type(lines), lines)
    # 关闭文件
    f.close()

# 输出:
<class 'list'> ['这天,酒店老板正在大厅巡视。\n', '来了一乞丐上前说道:“老板给个牙签行吗?”\n', '老板给他一个打发走了。\n', '一会儿,又来一个乞丐,也是来要牙签的。\n', '老板心想现在这乞丐怎么不要饭改要牙签了?\n', '也同样给他一个打发走了,没过多旧,又来一个乞丐。\n', '老板对他说:“你也是来要牙签的吗?”\n', '乞丐说:“有个人吐了,可我晚了一步,已经被前面两个乞丐把能吃的都吃了,现在只剩下汤了。你能给我个吸管吗?']

4. 读文件方法, 内存消耗对比(重要!)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

if __name__ == '__main__':
    # 打开文件
    f = open(file=r'D:\Codes\s14_python3\file_operation_learning\lyrics.txt',
             mode="r",
             encoding="utf-8")
    # 读取文件, 将文件内容全部读出到内存, 大文件时, 内存消耗大
    for line in f.readlines():
        print(type(line), line.strip())

    print("分隔符".center(50, "-"))
    
    # 大文件时, 推荐使用
    # 读取文件, 将文件内容一行一行全部读出到内存, 且仅内存中, 仅保存一行,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个可能的Python学习计划,拆分到: 第1: - 学习Python基础语法,包括变量、数据类型、运算符、控制结构等。 - 安装Python环境,选择一款IDE(例如PyCharm)进行代码编写和调试。 - 完成一些简单的练习,加深对基础语法的理解。 第2: - 学习Python函数的定义和调用,函数参数传递等。 - 学习Python模块的导入和使用,了解常用标准库的功能。 - 完成一些练习,熟悉函数和模块的使用。 第3: - 学习Python面向对象编程,包括类、对象、继承、多态等。 - 学习Python异常处理,了解如何处理程序运行过程中出现的异常。 - 完成一些练习,掌握面向对象编程和异常处理的方法。 第4: - 学习Python常用数据结构,包括列表、元组、字典、集合等。 - 学习Python高级特性,包括生成器、迭代器、装饰器、闭包等。 - 完成一些练习,加深对数据结构和高级特性的理解。 第5: - 学习Python文件操作,包括文件读写、文件定位、文件压缩等。 - 学习Python正则表达式,了解如何进行字符串匹配。 - 完成一些练习,熟悉文件操作和正则表达式的使用。 第6: - 学习Python网络编程,包括socket编程、HTTP协议等。 - 学习Python多线程和多进程编程,了解如何利用多核CPU提高程序性能。 - 完成一些练习,掌握网络编程和多线程/多进程编程的方法。 第7: - 学习Python数据库编程,包括MySQL、Oracle、SQLite等数据库的连接和操作。 - 学习Python web框架,例如Flask、Django等,了解如何进行web开发。 - 完成一些练习,熟悉数据库编程和web开发的流程。 第8: - 复习前面学习的知识点,加深对Python的理解。 - 开始进行Python项目实战,例如爬虫、数据分析、机器学习等。 - 完成一个小型项目,巩固前面所学知识。 以上只是一个可能的Python学习计划,具体安排可以根据自己的情况进行调整。同时,建议在学习过程中多写代码,多实践,才能真正掌握Python编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值