一.读写文件

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的更多相关文章

  1. JavaScriptSerializer 序列化json 时间格式

    利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换 1.利用字符串直 ...

  2. python学习之文件读写,序列化(json,pickle,shelve)

    python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r  f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...

  3. 使用 ServiceStack.Text 序列化 json的实现代码【转】

    转自:http://www.jb51.net/article/38338.htm 今天发篇文章总结下自己使用 ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft. ...

  4. 使用 ServiceStack.Text 序列化 json 比Json.net更快

    本节将介绍如何使用ServiceStack.Text 来完成高性能序列化和反序列化操作. 在上章构建高性能ASP.NET应用的几点建议 中提到使用高性能类库,有关于JSON序列化的讨论. 在诊断web ...

  5. Jil序列化JSON

    使用Jil序列化JSON提升Asp.net web api 性能   JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入 ...

  6. 序列化json对象,通过ajax传入asp.net mvc后台

    序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台   今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...

  7. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties

      Day12 IO  序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...

  8. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

  9. mvc 使用Newtonsoft.Json进行序列化json数据

    mvc 使用Newtonsoft.Json进行序列化json数据 JsonResult  使用js 序列号化,先集成扩展.使用newtonsoft http://blog.csdn.net/zhang ...

随机推荐

  1. Calendar类进行日期操作

    import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 测试日期类 * ...

  2. mysql索引之七:组合索引中选择合适的索引列顺序

    组合索引(concatenated index):由多个列构成的索引,如create index idx_emp on emp(col1, col2, col3, ……),则我们称idx_emp索引为 ...

  3. 洛谷——P2299 Mzc和体委的争夺战

    P2299 Mzc和体委的争夺战 题目背景 mzc与djn第四弹. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁(做过前三弹的都知道).但如此之多的男家丁吸引来了我们的体委(矮胖小伙),他要来 ...

  4. 【BZOJ 1018】【SHOI 2008】堵塞的交通traffic

    http://www.lydsy.com/JudgeOnline/problem.php?id=1018 线段树维护连通性. 把每一列看成一个节点,对于线段树上的每一个节点,维护8个信息,前6个字面意 ...

  5. JZYZOJ1379天才的约数和 数论 约数和

    http://172.20.6.3/Problem_Show.asp?id=1379   易得n=a*b2/b1: 需要注意算出n之后要判断n的约数和是否等于a,这里需要用约数和定理递归,递归前求一下 ...

  6. 【bzoj2190】[SDOI2008]仪仗队 数论 欧拉函数 筛法

    http://www.lydsy.com/JudgeOnline/problem.php?id=2190   裸欧拉函数,先不计算对角线(a,a)的一列,然后算出1到n-1的所有欧拉函数相加*2,再加 ...

  7. BZOJ 1098 [POI2007]办公楼biu(反向图bfs+并查集优化)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1098 [题目大意] 现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两 ...

  8. 【DFS】bzoj2435 [Noi2011]道路修建

    两遍DFS.第一遍统计以每个点为根的子树大小,第二遍更新答案. #include<cstdio> #include<iostream> using namespace std; ...

  9. 4425: [Nwerc2015]Assigning Workstations分配工作站

    4425: [Nwerc2015]Assigning Workstations分配工作站 Description Penelope is part of the admin team of the n ...

  10. Problem A: 自定义函数strcomp(),实现两个字符串的比较

    #include<stdio.h> int strcmp(char *str1,char *str2) { if(str1!=NULL&&str2!=NULL) { whi ...