一.读写文件

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. 树形DP题目集合

    [树形DP](https://cn.vjudge.net/contest/123963#overview) #include<cstdio> #include<string> ...

  2. CodeForces 143C Help Farmer

    暴力枚举. 枚举最小的那个数字,不会超过$1000$,剩下的两个数字根号的效率枚举一下即可. #include<bits/stdc++.h> using namespace std; lo ...

  3. go chapter 7 - 类型

    任意类型 interface{} 遍历并判断类型 func MyPrintf(args ...interface{}) { for _, arg := range args { switch arg. ...

  4. Linux的文件描述符

    (1).文件描述符的定义 文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符:文件描述符是一个简单的非负整数,用以表明每个被进程 ...

  5. 求高精度幂(poj1001)

    Description Problems involving the computation of exact values of very large magnitude and precision ...

  6. CSS 笔记——文本字体

    5. 文本字体 -> 文本 (1)text-indent 基本语法 text-indent : length 语法取值 length : 百分比数字 | 由浮点数字和单位标识符组成的长度值,允许 ...

  7. 用flask开发个人博客(26)—— 利用config.py配置文件动态的创建不同的Flask对象

    原文:https://blog.csdn.net/hyman_c/article/details/52877704 对配置进行封装的目的是根据不同的使用场景,给flask的app赋予不同的config ...

  8. 分页器与form表单

    分页器 分页器对象 from django.core.paginator import Paginator Paginator对象: paginator = Paginator(user_list, ...

  9. [HNOI/AHOI2017]影魔

    [HNOI/AHOI2017]影魔 题目大意: 有一排\(n(n\le2\times10^5)\)个数\(k_{1\sim n}\).对于点对\((i,j)\),若不存在\(k_s(i<s< ...

  10. [PKUSC2018]最大前缀和

    [PKUSC2018]最大前缀和 题目大意: 有\(n(n\le20)\)个数\(A_i(|A_i|\le10^9)\).求这\(n\)个数在随机打乱后最大前缀和的期望值与\(n!\)的积在模\(99 ...