Python06_文件操作

本文介绍了Python中文件的编码原理,重点讲解了open()函数、基本访问模式、读取操作(包括read(),readlines(),readline()),文件写入和追加,以及处理文件路径中的特殊字符。通过实例演示了如何正确使用这些方法进行文件操作。
摘要由CSDN通过智能技术生成

声明

文章是基于:

哔哩哔哩上的《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》视频教程所做的学习笔记,仅为学习使用!!如有侵权,联系删除

目录

一、文件的编码

二、文件的读取

(一)open()打开函数

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

(三)读操作相关方法

1、read()方法

2、readlines()方法

3、readline()方法

4、for循环读取文件行

5、close()关闭文件对象

6、with open语法

(四)练习

三、文件的写入

四、文件的追加

五、综合案例


一、文件的编码

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

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

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

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

      • UTF-8

      • GBK

      • Big5等

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

    • 编码有许多,所以要使用正确的编码, 才能对文件进行正确的读写操作

    • UTF-8是目前全球通用的编码格式,一律以UTF-8格式进行文件编码即可

  • 操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别

二、文件的读取

(一)open()打开函数

  • 使用open函数,可以打开一个已经存在的文件,或者创建一个新文件:

    •  open(name, mode, encodimg)
       ​
       open("D:/11.txt", "r", encoding = "UTF-8")
    • name:是要打开的目标文件名字符串(可以包含文件所在的具体路径)

    • mode:设置打开文件的模式(访问模式)只读、写入、追加

    • encoding:编码格式(推荐使用UTF-8

      • encoding的顺序不是第三位,所以不能用位置参数,关键字参数直接指定

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

(三)读操作相关方法

  • 文件读取本质上存在一个指针,当我们打开文件开始读取之后,不管调用什么方法都会续接上一次读取文件的方法,虽然read()和readlines()是不同的方法,但打开的是同一个文件对象也会续接上一个方法去读取

1、read()方法

 文件对象.read(num)
  • num表示要从文件中读取的数据的长度(单位是字节

  • 如果没有传入num,那么就表示读取文件中所有的数据

  • 一段程序中有多个read方法,第二个read会从第一个read读取的末尾作为开头,继续往下读取

  • 得到的结果是一个字符串

2、readlines()方法

  • readlines可以按照行的方式把整个文件中的内容进行一次性读取

  • 返回的是一个列表

  • 其中每一行的数据一个元素

  •  f = open("python.txt", "r", encoding = "UTF-8")
     content = f.readlines()
     ​
     # ['hello world\n', 'abcdefg\n', 'bbb]\n', 'ccc']
     print(content)
     ​
     # 关闭文件
     f.close()

3、readline()方法

  • 调用一次,读取一行内容

  •  f = open('python.txt', "r", encoding = "UTF-8")
     ​
     content = f.readline()
     print(f"第一行:{content}")
     ​
     content = f.readline()
     print(f"第二行:{content}")

4、for循环读取文件行

 for line in open("python.txt", "r", encoding = "UTF-8"):
     
 or
 ​
 f = open("python.txt", "r")
 for line in f:
     print(f"每一行数据是:{line}")
     
 # 每一个line临时变量,就记录了文件的一行数据

5、close()关闭文件对象

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

6、with open语法

 # f是文件对象别名称
 with open("python.txt", "r", encoding = "UTF-8") as f:
     for line in f:
         print(f"每一行的内容{line}")
     
 # 通过在with open的语句块中对文件进行操作
 # 可以在操作完成后在自动关闭close文件,避免遗忘掉close方法

(四)练习

 # 打开文件,以读取模式打开
 f = open("E:/Heima_Python_Learning/08_文件/word.txt", "r", encoding = "UTF-8")
 ​
 # 方式1:read()方法都区全部内容,通过字符串count方法统计itheima单词数量
 content = f.read()
 count = content.count("ieheima")
 ​
 # 方式2:读取内容,一行一行读取
 count = 0
 for line in f:
     line = line.strip() # 去除开头和结尾的空格以及换行符,结果是一行行字符串
                         # 换行会在读取文件内容时,读出\n
     words = line.split(" ") # 通过空格切分,将一行的单词取出 结果是一个列表
     for word in words:
         if word == "itheima":
             count += 1 # 单词是itheima,则数量+1
             
 # 关闭文件
 f.close()

三、文件的写入

  •  # 1.打开文件
     f = open("python.txt", "w", encoding = "UTF-8")
     ​
     # 2.文件写入
     f.write('hello world')
     ​
     # 3.内容刷新
     f.flush()
     ​
     # colse方法,内置了flush功能
     f.close()
    • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

    • 调用flush的时候,内容会真正写入硬盘中文件

    • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘

  • 文件如果不存在,使用w模式,会创建新文件

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

四、文件的追加

 # 1、打开文件,通过a模式打开即可
 f = open("python.txt", "a", encoding = "UTF-8")
 ​
 # 2、文件写入
 f.write("hello world")
 ​
 # 3、内容刷新
 f.flush()
  • a模式,文件不存在会创建文件

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

五、综合案例

"""
    一般情况下,Python解释器会将遇到的‘\’识别为路径,会自动增加一个’'以便和转义字符进行区分,但若遇到转义字符则不增加‘\’
    文件路径中若包含‘\0’、‘\t’ 等特殊转义字符时要特别注意
    推荐文件路径写法: /
    斜杠反过来了,这样就不会出现歧义了
"""

# 打开文件得到文件对象,准备读取
fr = open("E:/Heima_Python_Learning/08_文件/bill.txt", "r", encoding = "UTF-8")

# 打开文件得到文件对象,准备写入
fw = open("E:/Heima_Python_Learning/08_文件/bill.txt.bak", "w", encoding="UTF-8")

# for循环读取文件
for line in fr:
    line = line.strip()  # 去除首位的空格以及换行符
    # 判断内容,将满足的内容写出
    if line.split(",")[4] == "测试"  : # split方法会得到一个列表对象
        continue
    # 将内容写出
    fw.write(line)
    # 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")

# close关闭2个文件对象
fr.close()
fw.close()  # 写文件调用close()会自动flush

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star_KeyW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值