Day 9 异常处理与文件操作

该博客主要介绍了Python中的异常处理,涉及try、except、finally关键字。还详细阐述了文件操作,包括File对象的使用,如open函数的参数含义,以及文件的读写、关闭等操作,同时提及了文本文件、图片文件、Json和csv文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常处理

  关键字, 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

 

转载于:https://www.cnblogs.com/greatX/p/10949984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值