一.读写文件

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. C#将String传入C++的char*

    C++的函数参数列表中包含一个char*的输出型参数,然而在C#调用该dll时候,会自动将函数的中的char*参数“翻译”为sbyte*, 使用了各种方法都不能调用函数,主要是不能合适的转换为sbyt ...

  2. 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】

    1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路……/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小 ...

  3. CodeForces 731E Funny Game

    博弈,$dp$. 设$f[i]$表示 如果先手第一次出手取到位置$i$,直到游戏结束,双方均采取最优策略,先手-后手得分的差值. 那么$f[i]=min(sum[i]-sum[j]+maxf[j+1] ...

  4. DP套DP

    DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...

  5. BZOJ 2467 [中山市选2010]生成树(组合数学)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2467 [题目大意] 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边 ...

  6. 【计算几何】【极角排序】Gym - 101174B - Bribing Eve

    把每件物品当成平面上一个点,将第一件物品放在原点.那个权重值相当于一条直线,于是相当于直线绕原点转一圈,统计上侧点的数量. 队友的代码: #include <cmath> #include ...

  7. 【强连通分量缩点】【拓扑排序】【dp预处理】CDOJ1640 花自飘零水自流,一种相思,两处闲愁。

    题意: 在n个点m条边的有向图上,从1出发的回路最多经过多少个不同的点 可以在一条边上逆行一次 题解: 在同一个强连通分量中,显然可以经过当中的每一个点 因此先将强连通分量缩点,点权为强连通分量的点数 ...

  8. 【单调队列DP+manacher】BZOJ2565-最长双回文串

    [题目大意] 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. [思路] 首先普通地求manacher,然后求出以每个位置为左端点和右端 ...

  9. mysql函数的使用create function myfunction(...

    use test   //必须在某个数据库下面创建 delimiter $ //创建 CREATE FUNCTION myFunction(ln int, ls int)   //参数这里不能加def ...

  10. NHibernate 操作视图 第十三篇

    在NHibernate中,可以把视图当表一样操作,只需要记住一点就是,视图是只读的,因此映射实体的setter应该改为protected. 新建一个视图如下: 持久化类: public class C ...