IO/序列化/JSON
一.读写文件
1.open:打开文件
open(path, mode, encoding='xxx', errors='ignore')
mode取值:
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开,先读后写(注意需要将文件指针重置为0,f.seek(0), 否则将变成追加内容)
w+ 以读写模式打开 (参见 w ), 先写后读
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
2.read:读取全部内容
3.readline:读取一行内容:
4.readlines:读取所有行,作为列表返回
5.write:写入内容
6.writelines:写入序列字符串
7.close:关闭打开的文件,打开的文件必须及时关闭
示例代码:
f = open('a.txt', 'r')
content = f.read()
f.close()
print(content)
示例代码2:
f = open('a.txt', 'r')
content = ''
for line in f.readlines():
content += line.strip() #过滤尾部换行符
f.close()
print(content)
示例代码3:
f = open('a.txt', 'r')
content = ''
for line in f.readlines():
content += line.strip() #过滤尾部换行符
f.close()
print(content)
二.更加简便的方法with
1.因为读取文件后要关闭,所以一般代码会如下所示:
content = ''
try:
f = open('a.txt', 'r')
for line in f.readlines():
content += line.strip() #过滤尾部换行符
except BaseException:
pass
finally:
f.close() print(content)
2.使用with
示例代码
content = ''
with open('a.txt', 'r') as f:
for line in f.readlines():
content += line.strip() #过滤尾部换行符
print(content)
示例代码:
with open('a.txt', 'a') as f:
f.writelines(['Hello, world!\n','Hello, world!\n'])
二.内存读写
1.字符串读写
借助StrongIO和文件读写大致相同,调用close时,内存释放
示例:
from io import StringIO f = StringIO()
f.write('hello')
f.write('word')
print(f.getvalue())
f.close()
2.字节读写
借助BytesIO和文件读写大致相同,调用close时,内存释放
from io import BytesIO f = BytesIO()
f.write('你'.encode('utf-8')) #写入经过UTF-8编码的bytes
f.write('好'.encode('utf-8')) #写入经过UTF-8编码的bytes
print(f.getvalue())
f.close()
三.操作文件和目录
1.系统类型:
>>> import os
>>> os.name
'nt'
posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。
2.环境变量:
>>> os.environ
>>> os.environ.get('PATH') #获取其中一项
3.目录/路径
os.path模块中的方法
>>> os.path.abspath('.') #当前目录绝对路径
>>> os.path.join(os.path.abspath('.'), 'test') #合并路径
>>> os.mkdir('ror') #创建目录
>>> os.rmdir('ror') #删除目录
>>> os.rename('test.txt', 'test.py') #文件重命名
>>> os.remove('test.py') #删除文件
#拆分路径
>>> os.path.split('/usr/ror/a.txt')
('/usr/ror', 'a.txt') #拆分扩展名
>>> os.path.splitext('/usr/ror/a.txt')
('/usr/ror/a', '.txt')
#列出当前目录下所有的txt文件
>>> [file for file in os.listdir('.') if os.path.isfile(file) and os.path.splitext(file)[1] == '.txt'] #拷贝文件(拷贝当前目录下a.txt到b.txt)
>>> import shutil
>>> shutil.copyfile('a.txt', 'b.txt')
四.序列化/反序列化
1.序列化
示例代码:
>>> import pickle
>>> d=dict(age=10,name='g')
>>> pickle.dumps(d) #dumps 方法把任意对象序列化成一个bytes
>>> f=open('a.txt', 'wb')
>>> pickle.dump(d, f) #dump()直接把对象序列化后写入一个文件对象
>>> f.close()
2.反序列化
可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个文件对象中直接反序列化出对象
>>> f=open('a.txt', 'rb')
>>> d=pickle.load(f)
>>> f.close()
>>> d
{'age': 10, 'name': 'g'}
五.JSON
1.dict
>>> import json
>>> d=dict(age=10,name='g')
>>> json_str = json.dumps(d) #从字典/对象序列化
>>> json_str
'{"age": 10, "name": "guobin"}'
>>> json.loads(json_str) #从字符串反序列化
{u'age': 10, u'name': u'guobin'}
2.class
示例代码
import json class Foo:
def __init__(self, name, age):
self.name = name
self.age = age # json encode obj
f = Foo('g', 15)
print(json.dumps(f.__dict__)) #json decode obj
def hook(d):
return Foo(d['name'], d['age'])
f2 = json.loads('{"name": "g", "age": 15}', object_hook= hook)
print(f2)
输出:
{"name": "g", "age": 15}
<__main__.Foo object at 0x00000213E383A940>
IO/序列化/JSON的更多相关文章
- JavaScriptSerializer 序列化json 时间格式
利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换 1.利用字符串直 ...
- python学习之文件读写,序列化(json,pickle,shelve)
python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...
- 使用 ServiceStack.Text 序列化 json的实现代码【转】
转自:http://www.jb51.net/article/38338.htm 今天发篇文章总结下自己使用 ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft. ...
- 使用 ServiceStack.Text 序列化 json 比Json.net更快
本节将介绍如何使用ServiceStack.Text 来完成高性能序列化和反序列化操作. 在上章构建高性能ASP.NET应用的几点建议 中提到使用高性能类库,有关于JSON序列化的讨论. 在诊断web ...
- Jil序列化JSON
使用Jil序列化JSON提升Asp.net web api 性能 JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入 ...
- 序列化json对象,通过ajax传入asp.net mvc后台
序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台 今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...
- linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties
Day12 IO 序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...
- Pythoy 数据类型序列化——json&pickle 模块
Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...
- mvc 使用Newtonsoft.Json进行序列化json数据
mvc 使用Newtonsoft.Json进行序列化json数据 JsonResult 使用js 序列号化,先集成扩展.使用newtonsoft http://blog.csdn.net/zhang ...
随机推荐
- C#将String传入C++的char*
C++的函数参数列表中包含一个char*的输出型参数,然而在C#调用该dll时候,会自动将函数的中的char*参数“翻译”为sbyte*, 使用了各种方法都不能调用函数,主要是不能合适的转换为sbyt ...
- 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】
1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路……/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小 ...
- CodeForces 731E Funny Game
博弈,$dp$. 设$f[i]$表示 如果先手第一次出手取到位置$i$,直到游戏结束,双方均采取最优策略,先手-后手得分的差值. 那么$f[i]=min(sum[i]-sum[j]+maxf[j+1] ...
- DP套DP
DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...
- BZOJ 2467 [中山市选2010]生成树(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2467 [题目大意] 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边 ...
- 【计算几何】【极角排序】Gym - 101174B - Bribing Eve
把每件物品当成平面上一个点,将第一件物品放在原点.那个权重值相当于一条直线,于是相当于直线绕原点转一圈,统计上侧点的数量. 队友的代码: #include <cmath> #include ...
- 【强连通分量缩点】【拓扑排序】【dp预处理】CDOJ1640 花自飘零水自流,一种相思,两处闲愁。
题意: 在n个点m条边的有向图上,从1出发的回路最多经过多少个不同的点 可以在一条边上逆行一次 题解: 在同一个强连通分量中,显然可以经过当中的每一个点 因此先将强连通分量缩点,点权为强连通分量的点数 ...
- 【单调队列DP+manacher】BZOJ2565-最长双回文串
[题目大意] 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. [思路] 首先普通地求manacher,然后求出以每个位置为左端点和右端 ...
- mysql函数的使用create function myfunction(...
use test //必须在某个数据库下面创建 delimiter $ //创建 CREATE FUNCTION myFunction(ln int, ls int) //参数这里不能加def ...
- NHibernate 操作视图 第十三篇
在NHibernate中,可以把视图当表一样操作,只需要记住一点就是,视图是只读的,因此映射实体的setter应该改为protected. 新建一个视图如下: 持久化类: public class C ...