异常处理
关键字, try except finally


import time import sys filename = input('请输入文件名: ') try: with open(filename) as f: # 使用with, 作用范围最后会自动关闭资源 ,和主动调用 f.close()相同 lines = f.readlines() for line in lines: print(line.rstrip()) time.sleep(0.5) except FileNotFoundError as msg: print('无法打开文件:', filename) print(msg) except UnicodeDecodeError as msg: print('非文本文件无法解码') sys.exit() # exit函数实质上是引发了SystemExit异常 finally: # 此处最适合做善后工作, 如释放资源 print('不管发生什么我都会执行')
文件操作
File 对象
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- file: 文件路径
- mode: 操作模式
'r' 读取(默认) 'w' 写入 'x' 写入,如果文件已经存在,会产生异常 'a' 追加,将内容写到已有文件的末尾 'b' 二进制模式 't' 文本模式 '+' 更新,既可以读,也可以写 - encoding: 编码格式,一般使用utf-8
- errors: 报错级别
- newline: 区分换行符
file.close() 关闭文件,释放文件资源,之后不能再进行读写操作
file.write(str) 将字符串写入文件, 返回的是写入的字符长度
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则自己加入每行的换行符
file.readline() 返回当前索引的整行内容
file.readlines()返回所有行并返回结果
文本文件


import time def main(): # 一次性读取整个文件内容 with open('致橡树.txt', 'r', encoding='utf-8') as f: print(f.read()) # 通过for-in循环逐行读取 with open('致橡树.txt', 'r', encoding='utf-8') as f: for line in f: # 每0.5秒输出一行 print(line, end='') time.sleep(0.5) print() # 读取文件按行读取到列表中 with open('致橡树.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 读取行组成一个集合 print(lines) # 将100以内的偶数写入文件 prime.txt with open('prime.txt', 'w') as f: for num in range(2, 100): if num % 2 == 0: f.write(str(num) + '\n') print('写入完成!') if __name__ == '__main__': main()
图片文件


# 引入base64模块 import base64 # mode = rb, 以二进制模式读取 with open('mm.jpg', 'rb') as f: data = f.read() # data 类型 bytes print('字节数:', len(data)) # 将图片处理成BASE-64编码 print(base64.b64encode(data)) # 将二进制数据保存成图片 with open('girl.jpg', 'wb') as f: f.write(data)
Json


import json import requests # 使用模块requests, 请求一个json数据 resp = requests.get('http://api.tianapi.com/guonei/?key=APIKey&num=10') # 使用 json.loads 方法, 将json格式的字符串,转成dict 字典类型数据 data_model = json.loads(resp.text) print(data_model) # 定义一个字典集合 teacher_dict = {'name': '白元芳', 'age': 25, 'title': '讲师'} # 将字典数据转成 字符串 json_str = json.dumps(teacher_dict)
csv文件


# 引入 csv 模块 import csv def read(): try: with open('example.csv') as f: reader = csv.reader(f) data = list(reader) except FileNotFoundError: print('无法打开文件:example.csv') else: for item in data: print('%-30s%-20s%-10s' % (item[0], item[1], item[2])) def write(): try: with open('example1.csv', 'w') as f: writer = csv.writer(f) writer.writerow(['zhangsan', 16, 'male']) writer.writerow(['lisi', 18, 'male']) writer.writerow(['huahua', 16, 'female']) except BaseException as e: print('无法写入文件:example1.csv') else: print('保存数据完成!') if __name__ == '__main__': read() write()