文件操作
想想我们平常对文件的基本操作,大概可以分为三个步骤(简称文件操作三步走):
① 打开文件
② 读写文件
③ 关闭文件
注意:可以只打开和关闭文件,不进行任何读写
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下
open(name, mode,encoding)
name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式):只读、写入、追加等
encoding:编码格式(推荐使用UTF-8)
示例代码:
f = open('d:/hello.txt', 'r', encoding='UTF-8')
#encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
读操作相关方法
read()方法
文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字符?),如果没有传入num,那么就表示读取文件中所有的数据
readlines()方法
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
观察上图代码,先read4个字符后(你好加回车符加世正好四个字符),再read全部内容,却只有界!!!这是因为read的时候,指针会定位到上一个read的结尾处(原理暂不清楚)
readline()方法
功能:每次读取一行
因为指针的存在,每调用一次,就会读取一行
for循环读取文件行
close()关闭文件对象
最后通过close,关闭文件对象,也就是关闭对文件的占用
如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用
with open()方法
with open('d:/hello.txt', 'r', encoding='UTF-8') as f: print(f.read())
通过在with open的语句块中对文件进行操作,可以在操作完成后自动关闭close文件,避免遗忘掉close方法。
总结:
练习
统计python在文本中出现的次数(line.strip()是为了去除行末的换行符)
写操作相关方法
# 1.打开文件
f = open("D:/python.txt", "w")
# 2.文件写入
f.write("hello python!")
# 3.内容刷新
f.flush()
注意:
直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
当调用flush的时候,内容会真正写入文件
这样做是避免频繁的操作硬盘,导致效率下降(一堆,一次性写磁盘)
但是自己测试,不调用flush也可写入。
1.写入文件使用open函数的”w”模式进行写入
2.写入的方法有:
- wirte(),写入内容
- flush(),刷新内容到硬盘中
3.注意事项:
- w模式,文件不存在,会创建新文件
- w模式,文件存在,会清空原有内容
- close()方法,带有flush()方法的功能
追加写入
将w换成a即可,其他用法同w模式
# 1.打开文件 f = open("D:/nihao.txt", "a") # 2.文件写入 f.write("我是追加的内容")
练习
读取该文件,将正式的写入到一个新文件
# 打开文件得到文件对象。谁备读取
fr = open("D:/a.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象。谁备写入
fw = open("D:/a.txt.bak", "w", encoding="UTF-8")
# for箭环读取文件
for line in fr:
line = line.strip() # 去除前后空格和换行符
# 判断内容、将满足的内容写出
if line.split(",")[4] == "测试":
continue # continue进入下一次新坏,这一次后面的内容就跳过了
# 将内容写出去
fw.write(line)
# 由于的面对内容进行了strip()的操作、所以要手动的写出换行符
fw.write("\n")
# close2个文件对象
fr.close()
fw.close()
# 写出文件调用close()会自动flush()
结果