Python学习的第一阶段第八章:文件操作

本文详细介绍了Python中对文件的操作,包括文件的编码、读取和写入方式。使用open()函数以不同模式打开文件,如读取(r)、写入(w)和追加(a)。讨论了read()、readlines()和readline()等读取方法,以及如何使用for循环读取文件。还提到了文件关闭和使用withopen的上下文管理,以及文件的写入和追加操作,最后展示了文件备份的综合案例。
摘要由CSDN通过智能技术生成

Python学习——文件操作

目录

Python学习——文件操作

文件的编码

文件的读取

open()打开函数

读操作相关方法

文件对象.read(num) 

文件对象.readlines()  

文件对象.readline()    

for循环读取文件行

文件对象.close()

 with open语法

练习:单词计数

文件的写入和追加

综合案例:文件备份


文件的编码

以什么编码写入就以什么编码读取。UTF-8是目前全球通用的编码格式。

文件的读取

文件的操作步骤:

  • 打开文件   
  • 读写文件
  • 关闭文件

open()打开函数

语法:open(name, mode , encoding)

  • name : 打开的目标文件名的字符串(可以包含文件所在具体路径)。
  • mode : 设置打开文件的模式,包括只读(r)、写入(w,文件原先由内容会删掉重新编辑,没有内容则创建新内容)、追加(a,写到已有内容之后)等。
  • encoding:编码格式(推荐UTF-8)。encoding要使用关键字传参,open函数定义的时候encoding并不是在第三位。

读操作相关方法

文件对象.read(num) 

# num表示从文件中读取数据的长度(单位是字节),如果没有传入num则表示读取所有数据。当对文件进行两次读取时,第二次读取会在第一次读取的基础上接着读取。

代码示例如下:

# encoding要使用关键字传参,open函数定义的时候encoding并不是在第三位
f = open("E:/测试.txt", "r", encoding="UTF-8")
print(type(f))
# 读取文件——read
print(f"read读取后的结果是:{f.read(10)}")
print(f"read读取全部内容后的结果是:{f.read()}")

运行结果如下:

文件对象.readlines()  

# 按照行的形式读取全部数据,返回一个列表值,每一行的数据为该列表的一个元素。同样受前面读取结果(read())的影响,继续读取后续内容。

代码示例如下:

f = open("E:/测试.txt", "r", encoding="UTF-8")
print(type(f))
# 读取文件——read
# print(f"read读取后的结果是:{f.read(10)}")
# print(f"read读取全部内容后的结果是:{f.read()}")

# 读取文件——readlines
lines = f.readlines()
print(f"lines的对象类型是:{type(lines)}")
print(f"结果是:{lines}")

代码演示结果如下:

文件对象.readline()    

# 一次读取一行内容

代码示例如下:

# readline
f = open("E:/测试.txt", "r", encoding="UTF-8")
print(type(f))
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
line4 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第一行数据是:{line2}")
print(f"第一行数据是:{line3}")
print(f"第一行数据是:{line4}")

运行结果如下:

for循环读取文件行

for line in f:
    print(f"每一行数据是:{line}")

文件对象.close()

 #  关闭文件对象,如果不调用close(),同时程序也没有停止运行,那么这个文件将一直被Python程序占用。

代码示例如下: 

没有close(),程序一段时间内也不结束,此时改动txt文件,会提示文件被占用。

 with open语法

通过with open 语法打开文件,可以自动关闭。

with open("E:/测试.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(f"每一行数据是:{line}")        
time.sleep(5000000)

练习:单词计数

通过Windows的文本编辑器软件,将如下内容保存到:word.txt,文件可以存储在任意位置,统计kites出现的次数。

kites have wind
python java c
kites have python
qingdao shandong hanzhou
coffee kites kites

 代码示例如下:

#  练习 统计单词kites次数
count = 0  # 用来记录次数
with open("E:/word.txt", "r", encoding="UTF-8") as f:
    word = f.read()  # 读取文件内的数据给word,字符串类型
    # num = word.count("kites")    # 直接判断kites有缺陷,如果有kitesa单词,依然会统计进去
    # print(f"kites的数量有:{num}")
    word = word.replace("\n", " ")    # 去除换行符,避免对分割造成影响。不然会有'kites\n'元素,统计不到
    my_list = word.split(" ")  # 将字符串按照空格分隔,给列表
    print(my_list)
    for element in my_list:  # 遍历列表
        if element == "kites":   # 列表元素对比
            count += 1
print(f"kites出现的次数是:{count}")

文件的写入和追加

写入操作将文件原先的内容覆盖掉重新编辑(第一次写入时),追加操作则是写到已有内容之后,二者都可以创建没有的文件,然后写入。写入操作(w),追加操作(a)。可以通过\n实现换行操作。

f.write()    # 内容写入到内存中,并没有写入到硬盘

f.flush()   # 内容刷新,将内存中积攒的内容,写入到硬盘的文件中

f.close()     # 内置flush功能

注意:避免频繁调用操作硬盘,导致效率下降。

代码示例如下:

# 写操作
import time
f = open("E:/test.txt", "w", encoding="UTF-8")
f.write("Hello World")  # 内容写入到内存中,并没有写入到硬盘
#  f.flush()       # 将内存中积攒的内容,写入到硬盘的文件中
f.close()          # 内置flush功能

# 追加操作和写入操作的差距在于mode的不同
f = open("E:/test2.txt", "a", encoding="UTF-8")  #没有test文件,自动创建
f.write("\n你好,世界!")  # 内容写入到内存中,并没有写入到硬盘
f.flush()       # 将内存中积攒的内容,写入到硬盘的文件中
# f.close()          # 内置flush功能

综合案例:文件备份

 

代码示例如下:

#  案例:文件备份
f = open("E:/bill.txt", "r", encoding="UTF-8")  # 原文件
f0 = open("E:/bill.txt.bak", "a", encoding="UTF-8")  # 备份文件
for line in f:
    line = line.strip()  # 处理掉换行符
    my_list = line.split(",")  # 分割成列表
    if my_list[-1] == "测试":
        continue   # 进入下一次循环
    else:
        f0.write(line)
        #  由于前面对line进行了去换行符的操作,需要手动换行
        f0.write("\n")
f.close()
f0.close()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值