08-python的文件操作-读写

发布时间:2024年01月24日

01-文件的编码

image-20231031205816240

文件编码

image-20231031210011708

image-20231031210145035

image-20231031210242775

image-20231031210447663

02-文件的读取操作

什么是文件?

image-20231031213200925

image-20231031213342003

image-20231031213359934

image-20231031213431475

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

image-20231031213921352

"""
演示文件的读取
"""
#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
print(type(f))

可以先在电脑的某一个盘中创建一个txt文件,可以对其进行打开,读取,其代码是UTF-8,读取其类型是

image-20231031214821184

那么得到的这个文本对象,有哪些可以进行的操作呢?

读操作相关方法

image-20231031214939938

在读取文件内容之前,可以先查看一下记事本的内容如下:

image-20231031215120932

"""
演示文件的读取
"""
#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
# print(type(f))
#读取文件-read(),如读取10个字节
print(f"读取10个字节的结果:{f.read(10)}")

image-20231031215407222

print(f"读取全部内容的结果是:{f.read()}")#在不给参数的情况下,读取全部内容

image-20231031215658938

注意:连续两次读取的话,上一次读取的内容,下一次不会再读取。

#读取文件--readLines()
lines=f.readlines()#读取文件的全部行,封装到列表中
print(f"lines对象的类型是:{type(lines)}")
print(f"lines对象的内容是:{lines}")

image-20231031222302161

image-20231031222514387

调用一次读取一行内容。

#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
#读取文件--readline()
line1=f.readline()
line2=f.readline()
line3=f.readline()
print(f"第1行数据是:{line1}")
print(f"第2行数据是:{line2}")
print(f"第3行数据是:{line3}")

image-20231031223016404

image-20231031223048118

#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
#for循环读取文件行
for line in f:
 ? ?print(f"每一行数据:{line}")

image-20231031223352125

文件的关闭

image-20231031223504298

若文件没有关闭,则这个文件会一直占用python程序,所以要关闭这个文件

#文件的关闭
f.close()

image-20231031223937132

通过这种写法,可以自动完成对文件的close操作。

#with open 语法操作文件
with open("E:/测试.txt","r",encoding="UTF-8") as f:
 ? ?for line in f:
 ? ? ? ?print(f"每一行数据:{line}")

image-20231031224404292

并且此时我们对这个文件进行操作时候,可以在E盘内将其删除等一系列操作。

操作汇总

image-20231031224542278

课后练习-单词计数

通过Windows的文本编辑器软件,将如下内容,复制并保存到: word.txt,文件可以存储在任意位置

chengxuyuan itxuexi python

itxuexi python itxuexi

beijing shanghai itxuexi

shenzhen guangzhou itxuexi

wuhan hangzhou itxuexi

zhengzhou bigdata itxuexi

通过文件读取操作,读取此文件,统计itxuexi单词出现的次数

image-20240124132025326

1.read(),count("itxuexi")

2.一行行的读取文件 按照空格切分,统计itxuexi的次数

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式1:读取全部内容,通过字符串count方法统计itxuexi单词数量
content=f.read()
count=content.count("itxuexi")
print(f"itxuexi在文件中出现了:{count}次")
#最后关闭文件
f.close()

image-20240124132608136

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
for line in f:
 ? ?words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
 ? ?print(words)

image-20240124132919125

有反斜杠n的是无法被统计出来的,所以要踢出反斜杠n。可以用line.replace,把反斜杠n去部踢出掉。也可以用line.strip()去除开头和结尾的空格以及换行符。

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
for line in f:
 ? ?line=line.strip()#去除开头和结尾的空格和换行符
 ? ?words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
 ? ?print(words)

image-20240124133139783

很明显换行符都没有了,不在影响结果。可以统计itxuexi的数量了,定义count来统计数量。

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
count=0
for line in f:
 ? ?line=line.strip()#去除开头和结尾的空格和换行符
 ? ?words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
 ? ?for word in words:
 ? ? ? ?if word=="itxuexi":
 ? ? ? ? ? ?count+=1
print(f"itxuexi出现的次数是:{count}")
#最后关闭文件
f.close()

image-20240124133449686

03_文件的写入-write

image-20231103221523687

如何调用方法把内容写入到文件中?

"""
演示文档的写入
"""
#打开文件,不存在的文件,用w模式进行写文件
import time
?
f = open("E:/test.txt","w",encoding="UTF-8")
#write写入.此时会在e盘中创建这个一个叫test的txt,但是此时txt中还不会有内容,需要flush以后才会写进去
f.write("Hello World!!!")#此时只是将内容写入到了内存中,而不是内盘中
#flush刷新
f.flush() ? ? ? #将内存中积攒的内容,写入到硬盘的文件中

image-20231103222715413

image-20231103222730050

close功能可以直接内置flush功能,注释掉flush行内容,删除已经生成的文件,执行上面代码,依旧会生成一个test.txt文件

"""
演示文档的写入
"""
#打开文件,不存在的文件,用w模式进行写文件
import time
?
f = open("E:/test.txt","w",encoding="UTF-8")
#write写入.此时会在e盘中创建这个一个叫test的txt,但是此时txt中还不会有内容,需要flush以后才会写进去
f.write("Hello World!!!")#此时只是将内容写入到了内存中,而不是内盘中
#flush刷新
# f.flush() ? ? ? #将内存中积攒的内容,写入到硬盘的文件中
#close关闭,用close关闭文件
f.close() ? ? ? ?#close方法是内置了flush的功能的,也就是上面flush可以不用写

image-20231103223349027

image-20231103223410358

#打开一个已经存在的文件
f= open("E:/test.txt","w",encoding="UTF-8")
#Write写入,flush刷新
f.write("计算机")
#close
f.close()

image-20231103224109807

W模式的两种属性:

1.文件不存在的时候,会将文件创建出来 2.文件存在的时候,再写入新的内容,会将老的内容覆盖替换换位为新的内容

总结:

image-20231103224414159

04-文件的追加操作

image-20231103224543093

"""
演示问价内动追加写入
"""
#以下内容用于创建一个写入计算机内容的txt文件
#打开文件,不存在的文件
f = open("D:/test.txt","a",encoding="UTF-8")
#write写入
f.write("计算机")
#flush刷新
f.flush()
#close关闭
f.close()

image-20231103225648398

image-20231103225711162

#打开一个存在的文件
f = open("E:/test.txt","a",encoding="UTF-8")
#write写入,flush刷新
f.write("k考研别问为什么")
#close关闭
f.close()

image-20231103230218030

很明显,内容已经追加上去了。

若要加入的内容和原来内容不在同一行的话,可以加上\n

#打开一个存在的文件
f = open("E:/test.txt","a",encoding="UTF-8")
#write写入,flush刷新
f.write("\n考研别问为什么")
#close关闭
f.close()

image-20231103230524202

总结

image-20231103230604337

05-文件操作的综合案例

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

name,dato,money,type,somarks
周杰轮,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文件

image-20231104173155867

"""
演示文件操作综合案例:文件备份
?
"""
#打开文件得到文件对象,准备读取
fr =open("E:/bill.txt","r",encoding="UTF-8")#打开在E盘中已经存在的文件,用r
#打开文件得到文件对象,准备写入
fw =open("E:/bill.txt.bak","w",encoding="UTF-8")#将文件写入到d盘中,用w
#for 循环读取文件
for line in fr: ?#循环读取文件里的内容,可以用逗号将内容分隔一下
 ? ?#但是注意分隔以后,会有一个换行符,需要处理
 ? ?line =line.strip() ?#将开头和结尾空格都处理掉,同时也处理掉换行符
 ? ?if line.split(",")[4] =="测试" #通过逗号将文件内容分隔,选取列表中第4个元素
 ? ? ? ?continue ? ? ? ?#continue进入下一次循环,这一次后面的内容就不会在执行了
 ? ?#判断内容,将满足的内容写出
 ? ?fw.write(line)
 ? ?#由于前面对内容进行了strip()的操作,所以要手动的写出换行符
 ? ?fw.write("\n")
?
#close2个文件对象
fr.close()
fw.close() ? #x写出文件调用close()会自动flush()
文章来源:https://blog.csdn.net/weixin_49765221/article/details/135821156
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。