详解Python中的文件操作

 更新时间:2023年07月27日 15:20:15   作者:鲍宪立  
在日常生活中,文件操作主要包括打开、关闭、读、写等操作,这篇文章主要为大家详细介绍了Python中这些文件操作的实现,需要的可以了解下

一、文件的编码

1.1 背景

thinking:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?

answer:使用编码技术(密码本)将内容翻译成0和1存入。

编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。

计算机中有许多可用编码:

  • UTF-8
  • GBK
  • Big5
  • ...

不同的编码,将内容翻译成二进制也是不同的。

UTF-8是目前全球通用的编码格式。除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。

1.2 总结

二、文件的读取

2.1 什么是文件

内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。
一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

2.2 文件操作的内容

在日常生活中,文件操作主要包括打开、关闭、读、写等操作。

2.3 文件的操作步骤

大概可以分为三个步骤(简称文件操作三步走):

①打开文件

②读写文件

③关闭文件

注意:可以只打开和关闭文件,不进行任何读写。

2.3.1 open()打开函数

在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下

open(name, mode, encoding)
  • name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
  • mode:设置打开文件的模式(访问模式):只读、写入、追加等。
  • encoding:编码格式(推荐使用UTF-8)

实例代码:

f = open('python.txt', 'r', encoding='UTF-8')
# encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定

注意:此时的'f'是'open'函数的文件对象,对象是Python中一种特殊的数据类型,拥有属性和方法,可以使用对象.属性或对象.方法对其进行访问,w相当于是覆盖写入

mode常用的三种基础访问模式

2.3.2 读操作相关方法

read()方法:

文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

readlines()方法:

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f = open('python.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 关闭文件
f.close()

readline()方法,一次读取一行内容

f = open('python.txt')
content = f.readline()
print(f'第一行{content}')
content = f.readline()
print(f'第二行{content}')
# 关闭文件
f.close()

for循环读取文件行

for line in open('python.txt', "r"):
	print(line)
# 每一个line临时变量,就记录了文件的一行数据

close():关闭文件对象

f = open('python.txt', "r")
f.close()
# 最后通过close,关闭文件对象,也就是关闭对文件的占用
# 如果不调用close,同时程序没有停止运行,那么这个文件将一直被python程序占用。

with open语法

with open('python.txt', 'r') as f:
    f.readlines()
# 通过在with open的语句块中对文件进行操作
# 可以在操作完成后自动关闭close文件,避免遗忘掉close方法

2.3.3 操作汇总

2.3.4 总结

2.3.5 课后练习:单词计数

# 通过文件读取操作,读取文件word.txt,统计itheima单词出现的次数
# 打开文件,以读取模式打开
# 我的思路
# with open("word.txt") as f:
#     contents = f.readlines()
#     count = 0
#     print(contents)
#     for content in contents:
#         content.split(" ")
#         if content.count("itheima"):
#             count += 1
#     print(f"itheima出现了{count}次")
# 参考其他方法
f = open("word.txt", "r", encoding="UTF-8")
# 方式2:读取全部内容,通过字符串count统计itheima单词数量
# content = f.read()
# count = content.count("itheima")
# print(f"itheima在文件中出现了:{count}次")
# 方式三:读取内容,一行一行读取
count = 0  # 使用count变量来累计itheima出现的次数
for line in f:
    line = line.strip()  # 去除开头和结尾的空格以及换行符
    words = line.split(" ")
    for word in words:
        if word == "itheima":
            count += 1  # 如果单词是itheima,进行数量的累加加1
# 判断单词出现次数并累计
print(f"itheima出现的次数是:{count}")
# 关闭文件
f.close()

三、文件的写入

3.1 案例演示

# f.write("Hello world1111!")  # 内容写到内存中
# flush刷新
# f.flush()  # 将内存中积攒的内容,写入到硬盘
# close关闭
# f.close()  # close方法,内置了flush的功能的
f = open("test.txt", "w", encoding="UTF-8")
# write写入、flush刷新
f.write("小鲍学python")
# close关闭
f.close()

注意:

  • 直接调用write,内容并为真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容才会真正写入文件
  • 这样做是避免频繁地操作硬盘,导致效率下降(攒一堆,一次性写入磁盘)

写操作注意

  • 文件如果不存在,使用”w”模式,会创建新文件
  • 文件如果存在,使用”w”模式,会将原有内容清空

3.2 总结

四、文件的追加

4.1 追加写入操作快速入门

"""
演示文件的追加写入
"""
# 打开文件,不存在的文件
# f = open("test1.txt", "a", encoding="UTF-8")
# # write写入
# f.write("小鲍学python")
# # flush刷新
# f.flush()
# # close关闭文件
# f.close()
f = open("test1.txt", "a", encoding="UTF-8")
# write写入,flush刷新
f.write("\n月薪过万")
# close()关闭
f.close()

注意:

  • a模式,文件不存在会创建文件
  • a模式,文件存在会在最后,追加写入文件

4.2 追加操作总结

五、文件操作综合案例

5.1 完成文件备份案例

需求分析

需求:有一份账单文件,记录了消费收入的具体记录,内容如下:

name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式

要求将内容复制并保存为 bill.txt文件

"""
演示文件操作综合案例:文件备份
"""
# 我的写法,一开始理解有误了,题目的要求是测试的数据不需要备份到bak文件
# 读取文件
# f = open("bill.txt", "r", encoding="UTF-8")
# # 将文件写出到bill.txt.bak文件作为备份
# f_bak = open("bill.txt.bak", "w", encoding="UTF-8")
# flag = True
# for lines in f:
#     for line in lines:
#         if line == "测" or line == "试":
#             flag = False
#     if flag:
#         f_bak.write(lines)
#     flag = True
#
# # 关闭文件
# f.close()
# f_bak.close()
# 参考写法
# 打开文件得到文件对象,准备读取
fr = open("bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("bill.txt.bak", "w", encoding="UTF-8")
# for循环读取文件
for line in fr:
    line = line.strip()
    # 判断内容,将满足的内容写出
    if line.split(",")[4] == "测试":
        continue
    # 将内容写出去
    fw.write(line)
    # 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")
# close2个文件对象
fr.close()
fw.close()  # 写出文件调用close()会自动flush()

以上就是详解Python中的文件操作 的详细内容,更多关于Python文件操作 的资料请关注脚本之家其它相关文章!

相关文章

  • 利用Python实现文件读取与输入以及数据存储与读取的常用命令

    利用Python实现文件读取与输入以及数据存储与读取的常用命令

    这篇文章主要给大家介绍了关于利用Python实现文件读取与输入以及数据存储与读取的常用命令,文中还介绍了用python循环保存文件并循环读取文件的方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

    DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

    Djangorestframework-simplejwt是Django REST Framework框架的一个jwt插件,使用 python http 工具进行接口测试的方法文中给大家提到,重点给大家分享djangorestframework-simplejwt 使用记录及登陆认证的完成过程,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • Python实现Word图片提取与批量处理的最佳实践

    Python实现Word图片提取与批量处理的最佳实践

    在日常工作中,我们经常会遇到需要从Word文档中提取图片的情况,本文将聚焦于如何利用Spire.Doc for Python这一高效库,实现Word文档图片的批量提取,让你彻底告别低效的手动操作
    2025-12-12
  • 使用Python将Exception异常错误堆栈信息写入日志文件

    使用Python将Exception异常错误堆栈信息写入日志文件

    这篇文章主要介绍了使用Python将Exception异常错误堆栈信息写入日志文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python中的Numpy矩阵操作

    Python中的Numpy矩阵操作

    这篇文章主要介绍了Python中的Numpy矩阵操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • python保存大型 .mat 数据文件报错超出 IO 限制的操作

    python保存大型 .mat 数据文件报错超出 IO 限制的操作

    这篇文章主要介绍了python保存大型 .mat 数据文件报错超出 IO 限制的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python迭代器Iterable判断方法解析

    Python迭代器Iterable判断方法解析

    这篇文章主要介绍了Python迭代器Iterable判断方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python实现屏幕录制功能的代码

    Python实现屏幕录制功能的代码

    这篇文章主要介绍了Python实现屏幕录制功能,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • python爬虫 execjs安装配置及使用

    python爬虫 execjs安装配置及使用

    这篇文章主要介绍了python爬虫 execjs安装配置及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 14 个Python小游戏 源码分享

    14 个Python小游戏 源码分享

    今天给大家带来14个py小游戏如:吃金币、打乒乓、滑雪、并夕夕版飞机大战、打地鼠、小恐龙、消消乐、俄罗斯方块、贪吃蛇、24点小游戏、平衡木、外星人入侵、贪心鸟、井字棋888‘’,文章都带了源码,感兴趣的小伙伴感快收藏起来吧
    2021-09-09

最新评论