python入门(八)——python文件操作

上期文章

python入门(七)——python函数进阶



1 文件的编码

使用编码技术将内容翻译成0和1存入,编码技术记录了翻译的规则,如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容

计算机中有许多可用编码:UTF-8、GBK、Big5等,不同的编码将内容翻译成二进制也是不同的

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

2 文件的读取

一篇文章、一段视频、一个可执行程序都可以被保存为一个文件,并赋予一个文件名,操作系统以文件为单位管理磁盘中的数据

文件可以分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别

文件操作主要包括打开、关闭、读、写等操作

open()打开操作

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

f = open('测试.txt', 'r', encoding='UTF-8')

注意:
f是open函数的文件对象,对象是python的一种特殊数据类型,拥有属性和方法,可以使用对象.属性火对象.方法进行访问

mode三种基础访问模式

模式描述
r以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式
w打开一个文件只用于写入,如果该文件以存在则打开文件,并从开头开始编辑,原有内容会被删除,如果该文件不存在,创建新文件
a打开一个文件用于追加,如果该文件以存在,新的内容将会被写入到已有内容之后,如果该文件不存在创建新文件进行写入
f = open('测试.txt', 'r', encoding='UTF-8')
print(type(f))

<class '_io.TextIOWrapper'>

读操作

read()

文件对象.read(num)
num:从文件中读取的数据长度(单位是字节),如果没有传入num,就表示读取文件中所有的数据

对同一个文件对象进行不同的读取操作,会从上一个操作的结尾处开始

f = open('测试.txt', 'r', encoding='UTF-8')
print(f.read(11))

《海绵宝宝》的故事情节
f = open('测试.txt', 'r', encoding='UTF-8')
print(f.read(11))
print(f"全部读写内容\n{f.read()}")

《海绵宝宝》的故事情节
全部读写内容
主要围绕着主角海绵宝宝和他的好朋友派大星、邻居章鱼哥、上司蟹老板等生物展开
场景设定于太平洋海底
一座被称为比奇堡的城市
这部动画除了固定描绘的卡通场景与人物之外
也会穿插一些真实的物件或人物
但海绵宝宝卡通的内容基本上与海洋知识无关
甚至夸大到完全不合乎科学与常识
例如海底生火、海底冲澡等
剧集内容也会时不时的嘲笑精致艺术和章鱼哥的劳工权益想法。

注意:
如果调用两次read,则第二次read将从第一次read读到的结尾处继续读取

readlines()

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

lines = f.readlines()
print(type(lines))
print(lines)

['《海绵宝宝》的故事情节主要围绕着主角海绵宝宝和他的好朋友派大星、邻居章鱼哥、上司蟹老板等生物展开\n', '场景设定于太平洋海底\n', '一座被称为比奇堡的城市\n', '这部动画除了固定描绘的卡通场景与人物之外\n', '也会穿插一些真实的物件或人物\n', '但海绵宝宝卡通的内容基本上与海洋知识无关\n', '甚至夸大到完全不合乎科学与常识\n', '例如海底生火、海底冲澡等\n', '剧集内容也会时不时的嘲笑精致艺术和章鱼哥的劳工权益想法。']

readline()

一次读取一行内容

line = f.readline()
print(line)
line = f.readline()
print(line)
f.close()

《海绵宝宝》的故事情节主要围绕着主角海绵宝宝和他的好朋友派大星、邻居章鱼哥、上司蟹老板等生物展开

场景设定于太平洋海底

for循环读取文件行

for line in f:
    print(line)

《海绵宝宝》的故事情节主要围绕着主角海绵宝宝和他的好朋友派大星、邻居章鱼哥、上司蟹老板等生物展开

场景设定于太平洋海底

一座被称为比奇堡的城市

这部动画除了固定描绘的卡通场景与人物之外

也会穿插一些真实的物件或人物

但海绵宝宝卡通的内容基本上与海洋知识无关

甚至夸大到完全不合乎科学与常识

例如海底生火、海底冲澡等

剧集内容也会时不时的嘲笑精致艺术和章鱼哥的劳工权益想法。

解除文件占用

f.close() #关闭文件对象
time.sleep(5000000) #程序睡眠状态
#如果不调用close,同时程序没有停止运行,那么这个文件一直被python程序占用

with open语法

with open('测试.txt', 'r', encoding='UTF-8') as f:
    for line in f:
        print(f"每一行数据是:{line}")
# 在操作完成后自动关闭close文件,避免遗忘close方法

每一行数据是:《海绵宝宝》的故事情节主要围绕着主角海绵宝宝和他的好朋友派大星、邻居章鱼哥、上司蟹老板等生物展开

每一行数据是:场景设定于太平洋海底

每一行数据是:一座被称为比奇堡的城市

每一行数据是:这部动画除了固定描绘的卡通场景与人物之外

每一行数据是:也会穿插一些真实的物件或人物

每一行数据是:但海绵宝宝卡通的内容基本上与海洋知识无关

每一行数据是:甚至夸大到完全不合乎科学与常识

每一行数据是:例如海底生火、海底冲澡等

每一行数据是:剧集内容也会时不时的嘲笑精致艺术和章鱼哥的劳工权益想法。

总结

在这里插入图片描述

  1. 操作文件需要通过open函数打开文件得到文件对象
  2. 文件对象读取方法:read(), readline(), readlines(), for line in 文件对象
  3. 文件读取完成后,要使用文件对象.close()方法关闭文件对象,否则文件一直被占用

课后练习

统计文本中itheima出现的次数

f = open('word.txt', 'r', encoding='UTF-8')
# 第一种方法:直接读取文档,统计出现次数
content = f.read()
count = content.count("itheima")
print(f"itheima出现次数:{count}")
f.close()

# 第二种方法:一行一行读取文档
all = 0
for line in f:
    line = line.strip()    # 去除开头和结尾的空格以及换行符
    words = line.split(" ")   # 按照空格切分单词
    count = words.count("itheima")
    all = count + all
print(f"itheima出现次数:{all}")

itheima出现次数:6

3 文件的写入

# 1.打开文件
f = open("python.txt", 'w')

# 2.文件写入
f.write('hello world')

# 3.内容刷新
f.flush()

注意:

  • 直接调用write内容并没有真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 调用flush的时候,内容会真正写入文件
  • 避免频繁的操作硬盘,导致效率下降
# 打开不存在的文件写入数据
f = open("不存在.txt", 'w', encoding='UTF-8')
f.write('比奇堡里有海绵宝宝和派大星,还有章鱼哥,蟹老板和痞老板')
# f.flush()
f.close() # close方法里面内置了flush功能,因此可以直接写close即可

# 打开存在的文件写入数据
f = open("不存在.txt", 'w', encoding='UTF-8')
f.write('海绵宝宝与派大星')
f.close()
# 文件内容只有海绵宝宝与派大星,因为w写入模式会把原先存在的内容全部清理掉

注意事项:

  • w模式,文件不存在,会创建新文件保存写入的内容
  • w模式,文件存在,会先清空原有文件里的内容,再写入新的数据
  • close()方法带有flush()方法的功能

4 文件的追加

# 1.打开文件
f = open("python.txt", 'a')

# 2.文件写入
f.write('hello world')

# 3.内容刷新
f.flush()

注意事项:

  • a模式,文件不存在,会创建新文件保存写入的内容
  • a模式,文件存在,在文件最后追加写入新内容
  • 可以在添加内容前面加入换行符"\n"以换行添加内容
f = open("不存在.txt", 'a', encoding='UTF-8')
f.write(',还有最可爱的姗迪和小蜗牛')
f.close()

比奇堡里有海绵宝宝和派大星,还有章鱼哥,蟹老板和痞老板,还有最可爱的姗迪和小蜗牛

# 换行添加文字内容
f = open("不存在.txt", 'a', encoding='UTF-8')
f.write('\n欢迎来到比奇堡!')
f.close()
比奇堡里有海绵宝宝和派大星,还有章鱼哥,蟹老板和痞老板,还有最可爱的姗迪和小蜗牛
欢迎来到比奇堡!

5 文件操作综合案例

完成对文件备份

  • 读取文件
  • 将文件写入到bill.txt.bak文件作为备份
  • 将文件内标记为测试的数据行丢弃

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,消费,正式

f = open('bill.txt', 'r', encoding='UTF-8')
f1 = open('bill.txt.bak', 'w', encoding='UTF-8')
for line in f:
    line = line.strip()
    if '测试' in line:
        continue
    f1.write(line)
    f1.write('\n')

f.close()
f1.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值