异常处理
关键字, 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()