目录
1.请通过python打开一个文本文件,并统计其中某一字符串的出现次数。
2.对一个文件进行备份,要求先读取文件,然后创建一个新文件并写入。
一、打开文件
使用open打开函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:
open(name,mode,encoding)
- name:要打开的目标文件的文件名(或地址)
- mode:设置打开文件的方式,只读,读写,追加等
- encoding:打开文件的编码格式,推荐使用utf-8
文件模式mode如下表所示:
二、文件的读取
接下来,我们重点了解一下只读模式,只读模式下有很多子功能,其中read和readlines是比较重要的两项。
1.read方法
read方法可以用于读取指定长度的内容,只需在read的参数中给定读取字符串长度(字节),就会读取相应长度的字符串。读取以后,指针会指到所读取的最后一个字符串的后面,也就是说,如果我们再一次使用read方法读取,会读取第一次读取过后,字符串中未被读取到的部分。
f = open("D:\桌面\Kiku.txt","r",encoding="utf-8")
print(f"读取10字节的内容:{f.read(10)}")
print(f"读取剩下的全部内容:{f.read()}")
文件内为从a到z的整个字母表,结果如下:
2.readlines方法
readlines方法可以按照行的方式把整个文件中的内容一次性读取,并且返回的内容是一个列表。
readlines方法和read方法共用一个指针,也就是说,如果readlines在read使用以后再使用,会接着读取read后未读取的部分。
f = open("D:\桌面\Kiku.txt","r",encoding="utf-8")
print(f"用read读取10字节内容:{f.read(10)}")
print(f"按行读取剩下的全部内容:{f.readlines()}")
文件内为从a到z的整个字母表,结果如下:
3.readline方法
与readlines的区别就是readline一次只读取一行内容。
f = open("D:\桌面\Kiku.txt","r",encoding="utf-8")
print(f"按行读取第一行内容:{f.readline()}")
print(f"按行读取第二行内容:{f.readline()}")
print(f"按行读取第三行内容:{f.readline()}")
文件内为从a到z的整个字母表,结果如下:
4.for循环读取文件
使用for循环,每次读取一行内容,每个line临时对象,就记录了一行的内容。
f = open("D:\桌面\Kiku.txt","r",encoding="utf-8")
for line in f:
print(line)
文件内为从a到z的整个字母表,结果如下:
三、文件的写入
向文件中写入内容只需要以’w‘的模式打开文件,然后使用write方法即可,但是用write函数以后,不会将内容真正写入文件,而是会保存在缓冲区中,这时再使用flush函数刷新内容即可。这样做是为了避免频繁操作磁盘导致效率下降。
1.文件不存在时
打开一个不存在的文件,并向里面写入内容,这时候系统会创建一个新文件并存储所写内容。
#打开一个不存在的文件
f = open("D:\桌面\ptest.txt","w",encoding="utf-8")
f.write("Hello,world!")
f.flush()
#关闭文件
f.close()
运行程序,我们会发现在指定位置出现了一个名为“ptest”的文件,里面写入了“Hello,world!”
另:close函数中内置了flush函数,所以上例可以不用加上flush函数的调用。
2.文件存在时
如果文件存在时,向里面写入内容,系统会将原文件中的内容全部清空后再写入新的内容。
#打开一个不存在的文件
f = open("D:\桌面\python.txt","w",encoding="utf-8")
f.write("Hello,world!")
#关闭文件
f.close()
运行文件,我们会发现原文件中的内容全部消失,并被替换成了“Hello,world!”
四、文件的追加
文件的追加和文件的写入大体上一模一样,只需要再打开文件时将mode设置为“a”即可。
在执行文件的追加操作时,如果文件不存在则会新创建一个文件;如果文件存在,则在原文件后面追加内容。
#打开一个不存在的文件
f = open("D:\桌面\python.txt","a",encoding="utf-8")
f.write("Hello,world!")
#关闭文件
f.close()
我们发现,在执行追加操作时,会将新内容直接加在原内容后面,如果需要换行,可加上“\n”符。
五、关闭文件
我们一般通过close方法关闭文件,也就是结束python对文件的占用,如果不关闭文件,系统就会一直运行,占用文件。
1.close方法
文件的关闭操作也很简单,只需要在最后使用close方法即可。
f = open("D:\桌面\Kiku.txt","r",encoding="utf-8")
for line in f:
print(line)
f.close()
2.with open自动关闭文件
如果担心忘记关闭文件,我们可以使用with open方法让程序在代码执行完毕以后自动关闭文件,使用with open可以使代码更简洁。
with open("D:\桌面\Kiku.txt","r",encoding="utf-8") as f:
for line in f:
print(line)
总结:
图片来源于黑马程序员
课后习题:
1.请通过python打开一个文本文件,并统计其中某一字符串的出现次数。
方法一:直接通过count函数统计
#打开文件
f = open("D:\桌面\python.txt","r",encoding="utf-8")
#方法1:读取所有字符,并通过count方法统计
content = f.read()
count = content.count("Python")
print(f"Python在文件中出现了{count}次")
#关闭文件
f.close()
方法二:分割字符串后比对每一个单词是否为指定单词
#打开文件
f = open("D:\桌面\python.txt","r",encoding="utf-8")
#方法2:一行一行地读取
count = 0
for line in f:
line = line.strip()#去除字符串中的/n
words = line.split()#分割字符串
for word in words:
if word =="Python":
count += 1
print(f"Python在文件中出现了{count}次")
#关闭文件
f.close()
2.对一个文件进行备份,要求先读取文件,然后创建一个新文件并写入。
#打开并读取原文件
fr = open("D:\桌面\python.txt","r",encoding="utf-8")
#创建或打开一个新文件用作备份文件,准备写入
fw = open("D:\桌面\python1.txt","w",encoding="utf-8")
#按行读取文件
for line in fr:
line = line.strip()#将空格换行符剥离
#写入备份文件
fw.write(line)
fw.write("\n")
#关闭文件
fr.close()
fw.close()