本文共 6203 字,大约阅读时间需要 20 分钟。
# 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')
# 语法length = f.write('内容')f = open(r'C:\Users\hp\OneDrive\桌面\xiaohan', 'a+')length = f.write('i love you')# 写入文件后将返回字符串的长度print(length)f.close() # 关闭文件# output:10
# 语法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']
# 语法 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() 步骤
# 语法import osos.mkdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')
# 语法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
# 语法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']
%1# 语法# 删除目录 path、path必须是个空目录、否则抛出OSError异常os.rmdir(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu')%2# 语法import shutilshutil.rmtree(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu') # 删除test文件夹下所有的文件、文件夹
# 语法f = open(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan', 'w')f.close()
# 语法os.path.isfile(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan')
# 语法os.remove(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan')
# 语法os.rename(r'C:\Users\hp\OneDrive\桌面\xianzhuzhu\xiaohanahan', 'xiaozizi')
# 1. 程序运行时、产生的所有对象都位于内存之中# 2. 内存有个特点、那就是它是非持久的# 3. 如果程序运行结束或者计算机断电、占用的内存将被清空# 4. 有时、我们需要把程序运行时内存中的对象、持久化下来保存在文件系统中、或者传输至网络%1# 将这样一个类的对象保存在文件中class Pair: def __init__(self, first, second): self.first = first self.second = secondpair = Pair(10, 20)# 1. 涉及到序列化和反序列化# 2. 序列化是将内存中的对象转换为可被存储或可被传输的形式的过程# 3. 反序列化是将序列化后的内容恢复回内存中对象的过程
# 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)
# 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/