1-文件读写

f = open('d:/file.txt','r') #如果文件不存在会报异常
print(f.read()) #一次性读取所有内容
f.close()

1.2 由于文件操作会用异常, 每次用try不方便

with open("d:/file.txt","r") as f:
print(f.read())

1.3 文件太大,一次性读取不科学,如果是配制文件

with open("d:/file.txt","r") as f:
for line in f.readlines():
print(line.strip())

1.4 指定字符编码

f = open('d:/file.txt', 'r', encoding='gbk',errors='ignore') #errors='ignore' 参数会忽略中的一些编码错误
f.read()

1.5 写文件,w会删除原来的,a是追加

f = open('d:/file.txt', 'a')
f.write("go out")
f.close()

https://docs.python.org/3/library/functions.html#open

2-StringIO和BytesIO
  StringIO顾名思义就是在内存中读写str。

from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('word!')
print(f.getvalue()) #hello word!

2.2 BytesIO
    StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO

from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue()) #b'\xe4\xb8\xad\xe6\x96\x87' #初始化BytesIO
from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())

3-操作文件和目录

3.1环境变量

import os
os.environ#环境变量
os.environ.get('OS') #得到指定的key

3.2 文件路径操作

os.path.abspath(".")
os.path.join('d:/','fffff')
os.mkdir("d:/testdir") #如果存在创建会报错
os.rmdir("d:/testdir")

3.3 文件路径

 os.path.split('/Users/michael/testdir/file.txt')#('/Users/michael/testdir', 'file.txt')
os.rename('test.txt', 'test.py') #对文件重命名
os.remove('test.py') #删除文件 [x for x in os.listdir('.') if os.path.isdir(x)] #列出当前目录下的所有目录
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'] #列出所有的.py文件

4-序列化操作(在其他语言中也被称之为serialization,marshalling,flattening等等)

import pickle
d = dict(name='Bob', age=20, score=88)
print(pickle.dumps(d)) f=open('dump.txt','wb')
pickle.dump(d,f) #序列化到文件
f.close()

4.2 反序列化

f = open('dump.txt','rb')
d=pickle.load(f)#反序列化
f.close()
print(d)

4.3 json序列化

import json
d = dict(name='Bob111', age=20, score=88)
print(json.dumps(d))

4.4 json序列化 进阶

import json
class Student(object):
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
s = Student('dashen', 20, 80) def student2dict(std):
return {
'name':std.name,
'age':std.age,
'score':std.score
}
print(json.dumps(s,default=student2dict))
print(json.dumps(s,default=lambda obj:obj.__dict__))

4.5 json反序列化

def dict2student(d):
return Student(d['name'], d['age'], d['score'])
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
stu = json.loads(json_str, object_hook=dict2student)
print(stu.score) #88

python-9-IO编程的更多相关文章

  1. python异步IO编程(一)

    python异步IO编程(一) 基础概念 协程:python  generator与coroutine 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio ...

  2. python异步IO编程(二)

    python异步IO编程(二) 目录 开门见山 Async IO设计模式 事件循环 asyncio 中的其他顶层函数 开门见山 下面我们用两个简单的例子来让你对异步IO有所了解 import asyn ...

  3. Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

    IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...

  4. Python之IO编程

    前言:由于程序和运行数据是在内存中驻留的,由CPU这个超快的计算核心来执行.当涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.由于CPU和内存的速度远远高于外设的速度,那么在IO编程中就存在 ...

  5. python同步IO编程——基本概念和文件的读写

    IO——Input/Output,即输入输出.对于计算机来说,程序运行时候数据是在内存中的,涉及到数据交换的地方,通常是磁盘.网络等.比如通过浏览器访问一个网站,浏览器首先把请求数据发送给网站服务器, ...

  6. Python笔记-IO编程

    IO在计算机中是指input和output(数据输入与输出),涉及到数据交换(磁盘.网络)的地方就需要IO接口. 输入流input stream是指数据从外面(磁盘.网络服务器)流入内存:输出流out ...

  7. 【Python】IO编程

    文件读写 StringIO和BytesIO 操作文件和目录 序列化 学习廖老师的py官网的笔记 1.stream的概念.数据交换通常需要建立两根“水管”. 2.同步IO和异步IO.异步性能高,但是编程 ...

  8. 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化

    IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...

  9. python同步IO编程——StringIO、BytesIO和stream position

    主要介绍python两个内存读写IO:StringIO和BytesIO,使得读写文件具有一致的接口 StringIO 内存中读写str.需要导入StringIO >>> from i ...

  10. Python中IO编程-StringIO和BytesIO

    Python在内存中读写数据,用到的模块是StringIO和BytesIO StringIO >>> from io import StringIO >>> f = ...

随机推荐

  1. vue打包后CSS中引用的背景图片不显示问题

    vue项目中,在css样式中引用了一张背景图片,开发环境下是可以正常显示,build之后背景图片不显示. 解决方法: 找到build/utils.js文件 修改成为如下所示内容:  添加红框中的内容即 ...

  2. 让你的sharepoint2013具有EMS快递查询的功能

    <iframe name="kuaidi100" src="http://www.kuaidi100.com/frame/app/index2.html" ...

  3. Mono For Android如何在VS2012 中打开设计界面

      刚接触 Mono For Android 没几天,不知不觉把设计界面弄丢了.辛辛苦苦才把设计界面弄出来,如果你在 Layout 下打开 *.xaml 的文件打开的却是 xml 文档,那么你可以按照 ...

  4. 01、Scala介绍与安装

    01.Scala介绍与安装 1.1 Scala介绍 Scala是对java语言脚本化,特点是就是使不具备脚本化的java语言能够采用脚本化方式来使用,使其具有脚本语言简单.所见即所得的特点,并且编程效 ...

  5. traffic_light_bag_file 数据集 下载链接

    链接:https://pan.baidu.com/s/19p5aGRfs6iFtN_SWAxCkRQ 密码:v9wx

  6. POJ-1159 Palindrome---变成回文串的最小代价

    题目链接: https://cn.vjudge.net/problem/POJ-1159 题目大意: 题意很明确,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符 ...

  7. Robin-Karp algorithm 字符串的匹配

    有关字符串的匹配问题,有很好的算法,即KMP算法,但是还有一种其实经常使用到的算法是Rabin-Karp算法,它是使用hash的原理来进行字符串匹配的.具体的做法如下. Rabin-Karp算法是由R ...

  8. P1024 一元三次方程求解

    P1024 一元三次方程求解 #include<cstdio> #include<iostream> #include<algorithm> using names ...

  9. 一些简单的Js代码的封装

    1 function getById(id) { 2 3 } 4 5 function getAttr(el, k) { 6 7 } 8 9 function setAttr(el, k, v) { ...

  10. 解决nsis error!cant initialize plug-ins directory.please try again later

    情况1: 调用SectionEnd会释放掉dll初始化标记,所有Section都必须放在函数的最下面. 情况2: 有可能是栈里的数据错乱,特别注意的是,使用BgWorker.dll获取多线程能力的时候 ...