python基础--文件读写与json模块的使用

一、读取文件的不同方式

		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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值