python写json⽂件⾃动换⾏_【03】Python⽂件读写JSON 1 打开⽂件
⽂件操作步骤:
1、打开⽂件获取⽂件的句柄,句柄就理解为这个⽂件
2、通过⽂件句柄操作⽂件
3、关闭⽂件。
1.1 打开⽅法
f = open('') #需f.close()关闭⽂件
f = open(r'E:\PycharmProjects\Python3_study\Day3\n⽂件读写',encoding='utf-8') #'r'可以防⽌字符串在使⽤的时候不被转义
with open(,) as f1,open(,) as f2: #⽂件使⽤结束后⾃动关闭⽂件
1.2 打开模式
a+
1 f = open('','a+', encoding = 'utf-8')
2 f.seek(0) #指针在末尾,需要将其移⾄开头
3 ad()) #读出所有内容
1 hello world
2 你好,世界
a+执⾏结果
w+
1 f = open('','w+', encoding = 'utf-8')
2 f.seek(0)
3 ad()) #发现原来的内容已清空
4 f.write('这是新的')
5 f.seek(0)
6 ad()) #可以读到刚刚写⼊的内容
1 这是新的
w+执⾏结果
r+
1 f = open('','r+', encoding = 'utf-8')
2 f.write('这是r+') #写⼊后指针跑到了新写⼊内容的末尾
3 f.seek(0)
4 ad()) #从开头开始替换
1 这是r+rld
2 这是新的
r+执⾏结果
2 ⽂件读
2.1 读⽂件⽅法
for line in f: 直接循环⽂件对象,每次循环的line是⽂件的当前⾏内容,进⼊下⼀循环,则循环⽂件的下⼀⾏的内容
1 f = open('','r',encoding='utf-8') #默认是当前路径
2 print('1=====',f.readline()) #读取⽂件⼀⾏的数据
3 print('2=====',f.readline()) #读取⽂件第⼆⾏的数据,即接下来⼀⾏
4 print('3=====',f.readlines()) #读取⽂件所有的数据,返回⼀个列表(从指针开始)
5 print('4=====',f.read()) #获取⽂件⾥的所有内容(从指针开始)
2.2 ⽇志分析
1 #写脚本每隔⼀分钟读⽇志⽂件,⼀分钟访问超200,禁⽌访问
2
3 #1读取⽂件内容,获取ip
4 #2把每个ip地址存起来 .
5 #3判断ip访问的次数是否超过200
6 #4加⼊⿊名单 print
7
8 importtime9
10 point = 0#初始位置
11
12 whileTrue:13
14 f = open('access.log','r', encoding = 'utf-8')15 IP ={}16
17 f.seek(point)18
19 for line in f: #⼀⾏⼀⾏读
20 str = line.split()[0] #split():通过指定分隔符对字符串进⾏切⽚,默认为所有的空字符,包括空格、换⾏(\n)、制表符(\t)等。
21 count =022 if str inIP:23 IP[str] += 1
24 else:25 IP[str] = 1
26
27 point =f.tell()28
29 f.close()30
31 for k, v inIP.items():32 if v > 200:33 print(k)
3 ⽂件写
3.1 写⽂件⽅法
f.writelines(listname):写⼀个list。类似于 for i in list: f.write(i)。所以,虽然writelines()可以写⼊string及list,但是字符串最好⽤write(),list最好⽤writelines()。⾃动循环,将list每⼀个元素追加写到⽂件中,如果想加换⾏符,可以将换⾏符放在list表⾥
f.write(str):写⼀个字符串。不能⾃动循环,参数可⾃⾏加换⾏符,如 f.write('\n'+name)
flush(): write后再调⽤flush,会将缓冲区⾥的内容⽴即写到磁盘上。写⽂件机制:cpu->内存->磁盘(为了提⾼效率,内存有缓冲区,当缓冲区满了,再将缓冲区的内容写到磁盘上)。
4 修改⽂件
4.1 ⽅法⼀ 不常⽤
1 #⽂件修改的⽅法:
2 #1、简单粗暴直接(适⽤于数据量少的情况)
3 #1)读出来⽂件所有内容,保存为⼀个变量
4 #2)对字符串变量进⾏处理
5 #3)除旧存新
6 with open('a.data','a+',encoding='utf-8') as f:
7 f.seek(0)
8 data = f.read() #获取原来的内容
9 print('修改前:%s'%data)10 new_data = place('你','You')11 print('修改后:%s'%new_data) #修改内容
12 f.seek(0)uncate() #清空⽂件内容,需要将⽂件指针移到头部再清空
14 f.write(new_data) #将修改后的内容存⼊⽂件
15 f.flush()
1 修改前:你好,
2 地球!
3 修改后:You好,
4 地球!
结果
4.2 ⽅法⼆ 常⽤★
1 #⾼效修改(⼀⾏⼀⾏修改)
2 #1)循环取每⼀⾏,去除前⾯的空格
3 #2)去除空⾏
4 #3)你替换成you
5 #4) 写到新⽂件⾥
6 #5)把原来⽂件删除,把新⽂件的名字改成原⽂件的名字
7 importos8 with open('a.data','r',encoding='utf-8') as f1, open('a2.data','w',encoding='utf-8') as f2:9 for line in f1: #1)循环取每⼀⾏,去除前⾯的空格
10 line = line.lstrip() #1)去除前⾯的空格
11 if line: #2)去除空⾏
12 print('修改前:%s'%line)13 line = place('You','你们') #3)You替换成你们
14 print('修改后:%s'%line)15 f2.write(line) #4) 写到新⽂件⾥
ve('a.data'); #5)把原来⽂件删除
ame('a2.data','a.data') #5)把新⽂件的名字改成原⽂件的名字
1 修改前:You好,2
3 修改后:你们好,4
5 修改前:地球!
6 修改后:地球!
结果
5 JSON处理
5.1 json.load(file)
⾃动读取⽂件中的json,转换成字典
{"xiaohei": "7891","海龙": "111","tanailing": "11111","xiaojun": "123456"}
⽂件 stus.json
1 importjson
2 f = open('stus.json',encoding='utf-8')
3 user_dic =json.load(f)
4 print(user_dic)
{'xiaohei': '7891', '海龙': '111', 'tanailing': '11111', 'xiaojun': '123456'}
运⾏结果
5.2 json.dump(dic, file, indent=4, ensure_ascii=False)
把字典转成json串,并⾃动写⼊⽂件中。
dump参数是(字典,⽂件句柄,indent)。indent⽤于缩进美化json串的。
ensure_ascii=False⽤于写⽂件时有unicode时⽤,正常显⽰出中⽂来。
1 importjson
2 stus = {'xiaojun':'123456','xiaohei':'7891','tanailing':'11111'
3 ,'海龙':'111'}
4 f = open('stus2.json','w',encoding='utf-8')
5 json.dump(stus,f,indent=4,ensure_ascii=False)
⽣成⽂件'stus2.json', ⽂件内容是由字典⽣成的json
运⾏结果
5.3 json.loads(str)
把json串(字符串)转成字典。loads参数是字符串
1 importjson2
3 s='''
4 {
5 "error_code": 0,
6 "stu_info": [
7 {
8 "id": 309,
9 "name"
: "⼩⽩",10 "sex": "男",11 "age": 28,12 "addr": "河南省济源市北海⼤道32号",13 "grade": "天蝎座",14 "phone": "185********",15 "gold": 10016 },17 {18 "id": 310,19 "name": "⼩⽩",20 "sex": "男",21 "age": 28,22 "addr": "河南省济源市北海⼤道32号",23 "grade": "天蝎座",24 "phone": "185********",25 "gold": 10026 }27 ]28 }29 '''
30
31 res = json.loads(s) #json串(字符串),转成字典
32 print(res)
{'error_code': 0, 'stu_info': [{'id': 309, 'name': '⼩⽩', 'sex': '男', 'age': 28, 'addr': '河南省济源市北海⼤道32号', 'grade': '天蝎座',
'phone': '185********', 'gold': 100}, {'id': 310, 'name': '⼩⽩', 'sex': '男', 'age': 28, 'addr': '河南省济源市北海⼤道32号', 'grade': '天蝎座', 'phone': '185********', 'gold': 100}]}
运⾏结果
5.4 json.dumps(dic,ensure_ascii=False)
把字典转成json串(字符串),loads参数是字典,需要⼿动write
1 importjson
2 stus = {'xiaojun':'123456','xiaohei':'7891','tanailing':'11111','海龙':'111'}
3 res2 =
json.dumps(stus,indent=8,ensure_ascii=False)4 print(res2)
python怎么读取json文件{"xiaojun": "123456","xiaohei": "7891","tanailing": "11111","海龙": "111"}
运⾏结果
参数说明:
输出中⽂需要指定ensure_ascii=False,如果使⽤默认配置, 输出的会是‘ASCII字符
indent参数根据数据格式缩进显⽰,读起来更加清晰 (数值代表缩进的位数)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论