Day 9 异常处理与文件操作

异常处理

  关键字, 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('不管发生什么我都会执行')
View Code

 

 

文件操作

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()
View Code

图片文件

# 引入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)
View Code

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)
View Code

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()
View Code

 

posted @ 2019-05-30 15:46  bigX  阅读(138)  评论(0)    收藏  举报