【03】Python 文件读写 JSON
1 打开文件
文件操作步骤:
1、打开文件获取文件的句柄,句柄就理解为这个文件
2、通过文件句柄操作文件
3、关闭文件。
1.1 打开方法
f = open('xxx.txt') #需f.close()关闭文件
f = open(r'E:\PycharmProjects\Python3_study\Day3\n文件读写',encoding='utf-8') #'r'可以防止字符串在使用的时候不被转义
with open(<filename>,<mode>) as f1,open(<filename>,<mode>) as f2: #文件使用结束后自动关闭文件
1.2 打开模式
- a+
f = open('test.txt','a+', encoding = 'utf-8')
f.seek(0) #指针在末尾,需要将其移至开头
print(f.read()) #读出所有内容
hello world
你好,世界
a+执行结果
- w+
f = open('test.txt','w+', encoding = 'utf-8')
f.seek(0)
print(f.read()) #发现原来的内容已清空
f.write('这是新的')
f.seek(0)
print(f.read()) #可以读到刚刚写入的内容
这是新的
w+执行结果
- r+
f = open('test.txt','r+', encoding = 'utf-8')
f.write('这是r+') #写入后指针跑到了新写入内容的末尾
f.seek(0)
print(f.read()) #从开头开始替换
这是r+rld
这是新的
r+执行结果
2 文件读
2.1 读文件方法
- f.readline():读文件的一行,文件指针移动到下一行
- f.readlines():读从文件指针当前位置至末尾的所有行,文件指针移动到末尾。取文件里面所有内容,返回的是一个list,每一行的内容放到一个list
- f.read():读从文件指针当前位置至末尾的所有内容,文件指针移动到末尾。读取文件里面所有的内容,字符串
- for line in f: 直接循环文件对象,每次循环的line是文件的当前行内容,进入下一循环,则循环文件的下一行的内容
f = open('file.txt','r',encoding='utf-8') # 默认是当前路径
print('1=====',f.readline()) #读取文件一行的数据
print('2=====',f.readline()) #读取文件第二行的数据,即接下来一行
print('3=====',f.readlines()) #读取文件所有的数据,返回一个列表(从指针开始)
print('4=====',f.read()) # 获取文件里的所有内容(从指针开始)
2.2 日志分析
#写脚本每隔一分钟读日志文件,一分钟访问超200,禁止访问 #1读取文件内容,获取ip
#2把每个ip地址存起来 .
#3判断ip访问的次数是否超过200
#4加入黑名单 print import time point = 0#初始位置 while True: f = open('access.log','r', encoding = 'utf-8')
IP = {} f.seek(point) for line in f: #一行一行读
str = line.split()[0] #split():通过指定分隔符对字符串进行切片,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
count = 0
if str in IP:
IP[str] += 1
else:
IP[str] = 1 point = f.tell() f.close() for k, v in IP.items():
if v > 200:
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、简单粗暴直接(适用于数据量少的情况)
# 1)读出来文件所有内容,保存为一个变量
# 2)对字符串变量进行处理
# 3)除旧存新
with open('a.data','a+',encoding='utf-8') as f:
f.seek(0)
data = f.read() #获取原来的内容
print('修改前:%s'%data)
new_data = data.replace('你','You')
print('修改后:%s'%new_data) #修改内容
f.seek(0)
f.truncate() # 清空文件内容,需要将文件指针移到头部再清空
f.write(new_data) #将修改后的内容存入文件
f.flush()
修改前:你好,
地球!
修改后:You好,
地球!
结果
4.2 方法二 常用★
# 高效修改(一行一行修改)
# 1)循环取每一行,去除前面的空格
# 2)去除空行
# 3)你替换成you
# 4) 写到新文件里
# 5)把原来文件删除,把新文件的名字改成原文件的名字
import os
with open('a.data','r',encoding='utf-8') as f1, open('a2.data','w',encoding='utf-8') as f2:
for line in f1: # 1)循环取每一行,去除前面的空格
line = line.lstrip() # 1)去除前面的空格
if line: # 2)去除空行
print('修改前:%s'%line)
line = line.replace('You','你们') # 3)You替换成你们
print('修改后:%s'%line)
f2.write(line) # 4) 写到新文件里
os.remove('a.data'); # 5)把原来文件删除
os.rename('a2.data','a.data') # 5)把新文件的名字改成原文件的名字
修改前:You好, 修改后:你们好, 修改前:地球!
修改后:地球!
结果
- os.remove('a.data'); #删除文件
- os.rename('a2.data','a.data') #修改文件名
5 JSON处理
5.1 json.load(file)
自动读取文件中的json,转换成字典
{
"xiaohei": "",
"海龙": "",
"tanailing": "",
"xiaojun": ""
}
文件 stus.json
import json
f = open('stus.json',encoding='utf-8')
user_dic = json.load(f)
print(user_dic)
{'xiaohei': '', '海龙': '', 'tanailing': '', 'xiaojun': ''}
运行结果
5.2 json.dump(dic, file, indent=4, ensure_ascii=False)
把字典转成json串,并自动写入文件中。
dump参数是(字典,文件句柄,indent)。indent用于缩进美化json串的。
ensure_ascii=False用于写文件时有unicode时用,正常显示出中文来。
import json
stus = {'xiaojun':'','xiaohei':'','tanailing':''
,'海龙':''}
f = open('stus2.json','w',encoding='utf-8')
json.dump(stus,f,indent=4,ensure_ascii=False)
生成文件'stus2.json', 文件内容是由字典生成的json
运行结果
5.3 json.loads(str)
把json串(字符串)转成字典。loads参数是字符串
import json s='''
{
"error_code": 0,
"stu_info": [
{
"id": 309,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省济源市北海大道32号",
"grade": "天蝎座",
"phone": "18512572946",
"gold": 100
},
{
"id": 310,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省济源市北海大道32号",
"grade": "天蝎座",
"phone": "18516572946",
"gold": 100
}
]
}
''' res = json.loads(s) #json串(字符串),转成字典
print(res)
{'error_code': 0, 'stu_info': [{'id': 309, 'name': '小白', 'sex': '男', 'age': 28, 'addr': '河南省济源市北海大道32号', 'grade': '天蝎座', 'phone': '', 'gold': 100}, {'id': 310, 'name': '小白', 'sex': '男', 'age': 28, 'addr': '河南省济源市北海大道32号', 'grade': '天蝎座', 'phone': '', 'gold': 100}]}
运行结果
5.4 json.dumps(dic,ensure_ascii=False)
把字典转成json串(字符串),loads参数是字典,需要手动write
import json
stus = {'xiaojun':'','xiaohei':'','tanailing':'','海龙':''}
res2 = json.dumps(stus,indent=8,ensure_ascii=False)
print(res2)
{
"xiaojun": "",
"xiaohei": "",
"tanailing": "",
"海龙": ""
}
运行结果
参数说明:
- 输出中文需要指定ensure_ascii=False,如果使用默认配置, 输出的会是‘ASCII字符
- indent参数根据数据格式缩进显示,读起来更加清晰 (数值代表缩进的位数)
【03】Python 文件读写 JSON的更多相关文章
- python文件读写及形式转化和CGI的简单应用
一丶python文件读写学习笔记 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode) filename:包含了你要访问的文件名称的字符串值. mo ...
- python 文件读写操作(24)
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
- python 文件读写方式
一.普通文件读写方式 1.读取文件信息: with open('/path/to/file', 'r') as f: content = f.read() 2.写入文件中: with open('/U ...
- python文件读写和异常
1,文本文件 普通打开 f.open f.close def main(): f = None try: f = open('致橡树.txt', 'r', encoding='utf-8') prin ...
- Python 文件读写,条件循环(三次登录锁定账号实例)
通过文件读写,条件循环相关语法,实现三次登录失败则锁定该账号的功能 需求一 """需求描述: 1.输入正确账号,密码,退出程序 2.登录失败,重新输入账号密码 3.同一账 ...
- 【学习】python文件读写,用with open as的好处,非常好【转载】
原文链接:http://www.cnblogs.com/ymjyqsx/p/6554817.html 备注:博主还有很多值得学习的笔记,遇到问题可以拜读,非常感谢博主的总结 读写文件是最常见的IO操作 ...
- python文件读写,以后就用with open语句
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- Python文件读写(open(),close(),with open() as f...)
Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题 ...
- Python文件读写、StringIO和BytesIO
1 IO的含义 在计算机中,IO是Input/Output的简写,也就是输入和输出. 由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就 ...
随机推荐
- C语言指令数组名和数组名取地址
以下C语言指令:int a[5] = {1, 3, 5, 7, 9}; int *p = (int *)(&a + 1); printf("%d, %d", *(a + 1 ...
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍
- framework7 底部弹层popup js关闭方法
<div class="u-sd-btns"> <button>同意</button> <button class="popup ...
- windows 把ps/2 鼠标当成ps/2键盘了
真坑口阿 https://zhidao.baidu.com/question/425134865713508932.html 电脑的PS/2鼠标接口认成键盘了 电脑主板技嘉,只有一个PS/2接口.开始 ...
- Delphi回车键切换焦点
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- IDEA反编译jar包源码
1.maven 项目查看jar源码 如何在idea中查看jar包源码 文章目录 准备jar包 idea打开文件夹 最后一步 准备jar包 例如,我准备看resin的jar,在桌面准备了一份 ide ...
- c# AES128 加解密算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发
针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...
- Golang基本类型整理
总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次. Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入 ...
- vue点击除了某组件本身的其它地方, 隐藏该组件的方法
点击emoji表情标签, 出现标签组件,点击其它地方, 改组件消失的效果; <template> <div class="writeZoon"> <d ...