博客
关于我
Python自学17(IO 操作)
阅读量:266 次
发布时间:2019-03-01

本文共 6203 字,大约阅读时间需要 20 分钟。

在这里插入图片描述

" 何顾远方,我心自有云白风清 "

不简单的输入输出:IO 操作

1、文件读写

1.1、打开文件

# 1. 在进行文件读写之前、有个重要的步骤——将文件打开# 2. 同时指定针对文件的读写模式、比如只读、只写、可读可写等等# 3. 只有先打开文件才能对文件进行读写操作# 语法打开文件使用内置函数 open()# 1. open() 的返回值为 file 对象、也就是这里的变量 f# 2. 利用这个对象、我们可以进行文件读写f = open(r'文件路径', 读写模式)f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'w')# 读写模式有以下模式# 1. 'r':只读、若文件不存在则抛出 FileNotFoundError 异常# 2. 'w':只写、将覆盖所有原有内容、若文件不存在则创建文件# 3. 'a':只写、以追加的形式写入内容、若文件不存在则创建文件# 4. 'r+':可读可写、若文件不存在则抛出 FileNotFoundError 异常# 5. 'w+':可读可写、若文件不存在则创建文件# 6. 'a+':可读可写、写入时使用追加模式、若文件不存在则创建文件# 1. 以上所有读写模式都是基于文本内容的# 2. 如果想要读写二进制内容、可在上面的基础上添加 'b' 模式,如 rb、'wb+'# 1. 上述打开方式默认使用 UTF-8 编码、如果文件内容并非 UTF-8 编码# 2. 可以使用 encoding 参数指定编码格式# 3. 如 f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'w', encoding='gbk')

1.2、写入文件

# 语法length = f.write('内容')f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'a+')length = f.write('i love you')# 写入文件后将返回字符串的长度print(length)f.close() # 关闭文件# output:10

1.3、读取文件

# 语法content = f.read()%1# 先将 i love youi love you写入文件f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'r')# 只读(r)content = f.read()print(content)f.close() # 关闭文件# output:i love youi love you%2# 1. 指定要读取内容的字符长度# 2. 每次调用 f.read(30) 时都是从上一次读取的结束位置开始# 3. 来读取新的内容、直至所有的内容被获取完、之后再调用 f.read(30) 只会得到空字符串 ''# 4. 先将 i love youi love you写入文件f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'r')# 只读(r)content = f.read(10)print(content)print(f.read(10))f.close() # 关闭文件# output:i love you#        i love you%3# 语法# 还可以按行来读取文件line = f.readline()# 1. 当文件'xiaohan'里面的内容为:# 2. The quick brown fox# 3. jumps over# 4. the lazy dog# 1. 先将# 2. The quick brown fox# 3. jumps over# 4. the lazy dog# 5. 写入文件f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'r')# 只读(r)content = f.readline()print(content)print(f.readline())print(f.readline())f.close() # 关闭文件# output:The quick brown fox# #        jumps over# #        the lazy dog%4 # 语法# 按行读取文件还可以一次性将所有行读出、然后放进列表里lines = f.readlines()# 1. 先将# 2. The quick brown fox# 3. jumps over# 4. the lazy dog# 5. 写入文件f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'r')# 只读(r)content = f.readlines()print(content)f.close() # 关闭文件# output:['The quick brown fox\n', 'jumps over\n', 'the lazy dog']

1.4、关闭文件

  1. 每次打开文件后,无论进行了多少读写操作,最终都一定要将文件关闭
  2. 因为打开文件会消耗相关系统资源(文件描述符),不使用时应及时释放
# 语法 1f.close()# 语法 2还有一种方式能自动关闭打开的文件、那就是使用 with 语句with open(r'C:\Users\hp\OneDrive\桌面\xiaohanhan', 'w') as f:    f.write('i love xiaohanhan')# 1. open() 后的 file 对象会被 as 关键字赋予变量 f# 2. 和之前一样、我们利用 f 进行文件读写# 3. with 语句会在它的代码块执行完毕后、或代码块抛出异常时、自动关闭文件、为我们省却了 f.close() 步骤

2、文件系统操作

  • 文件系统操作需要使用内置的 os 模块

2.1、创建目录

# 语法import osos.mkdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')

2.2、判断路径是否是一个目录

# 语法os.path.isdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')import osa = os.path.isdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')# 在 2.1 中创建的目录b = os.path.isdir(r'C:\Users\hp\OneDrive\桌面\xianhanahan')# 在 1.4 中创建的文件print(a)print(b)# output:True#        False

2.3、列举目录下的内容

# 语法os.listdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu') import osa = os.listdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')# 先在目录中建立 txt 文件 xiaowu 和 文件 xiaokiprint(a)# output:['xiaoki', 'xiaowu.txt']

2.4、删除目录

%1# 语法# 删除目录 path、path必须是个空目录、否则抛出OSError异常os.rmdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')%2# 语法import shutilshutil.rmtree(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')  # 删除test文件夹下所有的文件、文件夹

2.5、创建文件

# 语法f = open(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan', 'w')f.close()

2.6、判断路径是否是一个文件

# 语法os.path.isfile(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan')

2.7、删除文件

# 语法os.remove(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan')

2.8、重命名文件

# 语法os.rename(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan', 'xiaozizi')

3、序列化和反序列化

# 1. 程序运行时、产生的所有对象都位于内存之中# 2. 内存有个特点、那就是它是非持久的# 3. 如果程序运行结束或者计算机断电、占用的内存将被清空# 4. 有时、我们需要把程序运行时内存中的对象、持久化下来保存在文件系统中、或者传输至网络%1# 将这样一个类的对象保存在文件中class Pair:    def __init__(self, first, second):        self.first = first        self.second = secondpair = Pair(10, 20)# 1. 涉及到序列化和反序列化# 2. 序列化是将内存中的对象转换为可被存储或可被传输的形式的过程# 3. 反序列化是将序列化后的内容恢复回内存中对象的过程

4、pickle

# 1. Python 中内置的 pickle 模块用作序列化和反序列化# 2. 它的序列化结果是二进制形式# 语法1 序列号import picklesome_bytes = pickle.dumps(对象)# 语法2 反序列号import pickle对象 = pickle.loads(some_bytes)%1import pickleclass Pair:    def __init__(self, first, second):        self.first = first        self.second = secondpair = Pair(10, 20)some_bytes = pickle.dumps(pair)print(some_bytes)# output:b'\x80\x03c__main__\nPair\nq\x00)\x81q\x01}q\x02(X\x05\x00\x00\x00firstq\x03K\nX\x06\x00\x00\x00secondq\x04K\x14ub.'# 上面输出的乱码便是 pair 对象被序列化后的二进制%2# 刚才序列化后的结果、可以使用 pickle.loads() 将其反序列化回对象import pickleclass Pair:    def __init__(self, first, second):        self.first = first        self.second = secondpair = Pair(10, 20)some_bytes = pickle.dumps(pair)# 序列化print(some_bytes)pair = pickle.loads(some_bytes)# 反序列化print(pair.first)# output:b'\x80\x03c__main__\nPair\nq\x00)\x81q\x01}q\x02(X\x05\x00\x00\x00firstq\x03K\nX\x06\x00\x00\x00secondq\x04K\x14ub.'#        10%3# 1. 也可以与 open() 相结合、将序列化的结果保存在文件中# 2. 此时使用 pickle.dump()(注意与之前的 pickle.dumps() 不同)with open(r'C:\Users\hp\OneDrive\桌面\xiaohanhan', 'wb') as f:# 以二进制只写    pickle.dump(pair, f) %4# 1. 从文件中反序列化出对象# 2. 使用 pickle.load()(注意与之前的 pickle.loads() 不同)with open(r'C:\Users\hp\OneDrive\桌面\xiaohanhan', 'rb') as f:    pair = pickle.load(f)

5、JSON

# 1. pickle 使用 Python 专用的序列化格式# 2. 序列化后的结果无法做到跨语言使用# 3. 另外其序列化结果是二进制、不适合阅读# 1. JSON 相对而言更加通用和流行、并且其结果为文本格式、更具可读性# 2. 同样是刚才的 pair 对象、可以像这样将它序列化为 JSON 字符串# 语法import jsonjson_string = json.dumps(pair.__dict__)%1json_string'{''firs'': 10,''secon'': 20}'# 1. 这里使用了 pair.__dict__ 来获取包含所有 pair 属性的字典# 2. 因为类对象不能直接用于 json.dumps() 序列化、而字典可以# 1. 或者使用 default 参数、向 json.dumps() 告知如何进行从对象到字典的转换# 2. 这样便可以不使用 __dict__ 属性%2def pair_to_dict(pair):	return {   		'first': pair.first,		'second': pair.second,	}json_string = json.dumps(pair, default=pair_to_dict)%3# 从 JSON 反序列化为对象def dict_to_pair(d):    return Pair(d['first'], d['second'])pair = json.loads(json_string, object_hook = dict_to_pair)# 1. 上述反序列化过程中、json.loads() 首先会将 JSON 字符串反序列化为字典# 2. 然后使用 object_hook 参数进一步从字典转换出 pair 对象%4# 1. 与 pickle 相似、json 也可以与 open() 结合使用、将序列化的结果保存在文件中with open(r'C:\Users\hp\OneDrive\桌面\xiaohanhan', 'w') as f:    json.dump(pair, f, default=pair_to_dict)%5# 从文件中反序列化出对象with open(r'C:\Users\hp\OneDrive\桌面\xiaohanhan', 'r') as f:    pair = json.load(f, object_hook=dict_to_pair)

转载地址:http://uzho.baihongyu.com/

你可能感兴趣的文章
百度富文本编辑器UEditor指南-Array-专题视频课程
查看>>
OpenGL Sharders(着色器) 入门
查看>>
OpenGL 自定义着色器(Shaders)
查看>>
Android studio_像IDEA的代码分析结果(problmes栏)描述和错误定位/优化定位(替代方案)
查看>>
Python九齿耙(Ninerake)数据采集大数据深度学习智能分析爬虫软件的正则表达式规则简介
查看>>
Delphi 10.3 Rio的RadioGroup1控件如何设置 Items 的排列为横向横排水平显示
查看>>
Delphi 10.3 应用程序获取自身所在的目录文件夹名称
查看>>
Delphi SQL 查询数据表中规定的时间段内按天统计出每天的记录数
查看>>
从Android JAR文件创建Delphi接口的第三方工具
查看>>
Python学习笔记
查看>>
Kotlin实现冒泡排序
查看>>
C#控制台冒泡程序
查看>>
NodeJS下TypeScript环境安装
查看>>
论如何找tensorflow的源码
查看>>
Promise封装ajax请求
查看>>
修改Promise对象的状态的方式
查看>>
使用zookeeper API实现zookeeper的基本操作
查看>>
APP开发,公司需要具备哪些条件才能成为佼佼者?
查看>>
汽车后市场,小程序为何独占鳌头
查看>>
宠物行业蓝海,APP如何突出重围?
查看>>