一、读取文件的不同方式
r:读模式,打开文件时,如果没有指定方式,默认为读模式
w:写模式,会清除之前的内容,再写
a:追加写模式
r+:读写模式
w+:写读模式,默认打开的时候,会将文件清空,且文件指针在文件开头的位置
a+:追加写和读模式,默认打开的时候,文件指针在最后的位置
二、常用方法
f.read() #一次读出文件的所有内容,读出来的文件是放在内存中的,读大文件的时候,尽量使用readline函数
f.readline()
f.readlines() #一次读出文件的所有内容
f.write() # 一次写入一行
f.writelines() # 一次写入多行
f.tell() #获取当前文件指针的位置
f.seek() #设置文件指针的位置
f.flush() #刷新缓冲区,直接写到磁盘里面,有时候写入后,在文件中没有看见内容时,可以使用该方法
三、高效读取文件
f = open('filename.txt',encoding='utf-8')
for line in f:
print("读取文件中的每一行:",line)
四、文件的修改
1、直接在原文件进行修改
f = open('wenjian.txt','a+',encoding="utf-8") # 因为后面需要在原文件中写入内容,所以使用a+模式
f.seek(0) # 将指针位置移到最前面
result = f.read() # 一次性读出文件中的所有内容
new_result = result.replace("s","S") # 将文件中的内容进行修改
f.seek(0) # 指针移到最前面
f.truncate() # 清空文件内容
f.write(new_result) # 将内容重新写入文件
f.close()
2、一个文件读,另一个文件写,最后删除第一个文件,将第二个文件进行重命名
import os
f = open('wenjian.txt','a+',encoding="utf-8")
f2 = open('wenjian2.txt','a+',encoding="utf-8")
f.seek(0)
for line in f:
result = line.replace("S1","00") # 将wenjian.txt中的内容读出来,每行进行替换后,写入另一个文件
f2.write(result)
f.close()
f2.close()
os.remove("wenjian.txt") # 删除wenjian.txt
os.rename("wenjian2.txt","wenjian.txt") # 将wenjian2.txt重命名为wenjian.txt
五、其他内容
1、打开文件后,不需要手动进行关闭文件
with open('filename.txt','a') as f:
2、同时打开多个文件
with open('filename1.txt','a') as f1, open('filename2.txt','a') as f2:
六、文件读写与json模块的使用
json模块是内部库,不需要安装,可直接导入使用
1、字符串处理
dumps: 将dict转为str串,主要是用于将内容写入文件前进行转化,indent参数是指定缩进数量,ensure_ascii参数是设置对中文是否使用ascii方式进行编码,默认是true,如果想正确显示出中文,该参数需要设置为False
loads: 将str转为dict,主要是用于从文件中读取json后,操作数据时使用
代码片段如下:
import json
with open('a.json','a+',encoding='utf-8') as f:
info = {"name":'xiaoming',"age":18}
f.write(json.dumps(info,indent=4,ensure_ascii=False)) # dumps:将dict转为str串
f.seek(0)
result = json.loads(f.read()) # loads:将str转为dict
2、文件处理
dump和load可直接对文件进行操作,一行代码就可搞定
dump: 直接将dict转为str后,写入文件
load: 直接将文件中的内容读出来,并转为dict
代码片段如下:
with open('a.json','a+',encoding='utf-8') as f:
info = {"name": 'xiaoming', "age": 18}
json.dump(info,f,indent=4,ensure_ascii=False)
f.seek(0)
read_result = json.load(f)
七、常见练习题
1、敏感词替换
一个文件中放着敏感词,需要将读到文本中的敏感词用**替换
思路:
(1)将需要替换的敏感词读出来放在列表中
(2)将文本内容读出来,并循环敏感词列表,替换各敏感词
(3)清空原文件的内容,并写入新内容
keywords = []
with open('SensitiveWords.txt', encoding='utf-8') as keyword_file:
for line in keyword_file:
keywords.append(line.strip())
print(keywords)
with open('text.txt', 'a+', encoding='utf-8') as f:
f.seek(0)
result = f.read()
for s in keywords:
# 该步骤注意,下一次循环替换的时候,一定是要在上一次的结果之上进行替换,要不然最终的结果只是替换了最后一个敏感词的
result = result.replace(s, "**")
f.seek(0) # 注意该步必不可少,文件读完后,指针在最后面,truncate函数清空的指针后面的内容
f.truncate()
f.write(result)