文件读写和异常处理

DHCP 
Dynamic(动态) Host(主机)Configuration(配置)Protocol(协议)

TCP/IP family
UDP
@staticmethod
@classmethod

读写文件

import time
def main():
    """
    1、打开文件
    open(path, flag[, encoding][, errors])
    path: 要打开文件的路径
    flag: 打开方式
    r
    以只读的方式打开文件,文件的描述符放在文件的开头
    rb
    以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
    r + 打开一个文件用于读写,文件的描述符放在文件的开头
    w
    打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件
    wb
    打开一个文件值用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建新文件
    w + 打开一个文件用于读写
    a
    打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
    a +
    encoding: 编码方式
    errors: 错误处理
    """
    #相对路径,在当前路径下的路径
    #绝对路径,完整的路径
    #fs = open('hello.txt', 'r', encoding='utf-8')
    #content = fs.read() #读文件的全部内容
    #for line in fs: #一行一行读
        #print(line, end='')
        #time.sleep(0.5)
    #print(content)
    # mylist = fs.readlines() #将文件读进一个列表容器内
    # print(mylist)
    #fs.close() #与开成对出现,打开要关
    # ./ 表示在当前路径下  ../表示上一级路径
    #with open('../abc/hello.txt', 'r', encoding='utf-8') as fs: #这种方式打开会自动关闭文件
        #mylist = fs.readlines()
        #print(mylist)


if __name__ == '__main__':
    main()

写文件

def main():
    try:
        with open('hello.txt', 'a', encoding='utf-8') as fs:
            fs.write('我想做燕子\n')
            fs.write('只需简单思想\n')
            fs.write('只求风中流浪\n')
    except FileNotFoundError:
        print('没找到')

        
if __name__ == '__main__':
    main()
from math import sqrt


def main():
    filenames = ('a.txt', 'b.txt', 'c.txt')
    fs_list1 = []
    try:
        for filename in filenames:
            fs_list1.append(open(filename, 'w', encoding='utf-8'))
        for n in range(1, 10000):
            if is_prime(n):
                if n < 100:
                    fs_list1[0].write(str(n) + '\n')
                elif n < 1000:
                    fs_list1[1].write(str(n) + '\n')
                elif n < 10000:
                    fs_list1[2].write(str(n) + '\n')
    except FileNotFoundError as e:  # 把错误做别名处理
        print(e)  # 把错误信息打印出来
        print('指定的文件无法打开.')
    except IOError:
        # 如果try中出现了状况,报告错误继续执行后面的代码
        print('读写文件是出现错误.')
    else:
        pass
    finally:
        fs_list[0].close()
        fs_list[1].close()
        fs_list[2].close()
        
        # 不管程序正常还是异常最后这里的代码一定会执行
        # 所以此处最适合做释放外部资源的操作
        print('程序执行结束')


def is_prime(n):
    for factor in range(2, int(sqrt(n) + 1)):
        if n % factor == 0:
            return False
    return True if n!= 1 else False


if __name__ == '__main__':
    main()

二进制文件的读写

def main():
    try:
        with open('../abc/QQ图片20160708105700.jpg', 'rb') as fs1:
            data = fs1.read()
            print(data)
            print(type(data))
        with open('../efg/QQ图片20160708105700.jpg', 'wb') as fs2:
            fs2.write(data)
    except FileNotFoundError:
        print('没找到')
        
if __name__ == '__main__':
    main()

#BASE64编码

异常机制 - 处理程序在运行过程中出现的意外状况的手段

  • 因为不是所有的问题都能够在写程序调试程序的时候就能发现
  • 打开文件 -> 判断大小 -> 分配内存 -> 读取文件 -> 关闭文件
try:
    with open('./abc/hello.txt', 'r', encoding='utf-8') as fs: #这种方式打开会自动关闭文件
        mylist = fs.readlines()
        print(mylist)
except FileNotFoundError as e: #别名
    print(e) #可以打印出错误
    # except (FileNotFoundError , IOError): 如果处理方式不同分开写,如果处理方式相同可以写在一起
    print('指定的文件无法打开。')
except IOError:
    print('读写文件出现错误')
print('程序执行结束')

[Errno 2] No such file or directory: './abc/hello.txt'
指定的文件无法打开。
程序执行结束
try:
    #如果try中出现了状况就通过except来捕获错误(异常)进行对应的处理
    pass
except:
    #如果except后面什么都没有,可以捕获任何异常,但官方建议不要写这种
    pass
else:
    #如果没有出状况那么可以把无风险的代码放到else中执行
    pass
finally:
    #finally此处是最好的释放外部资源的位置因为这里的代码总是会执行
    #不管程序正常还是异常最后这里的代码一定会执行
#所以此处最适合做释放外部资源的操作
    pass
#字典、列表怎么写进文件
#json - JavaScript Object Notation模块(半结构化的文本)
#http://json.org
#
import json
mydict = {
        'name': '王星喆',
        'age' : 38,
        'qq' : 957658,
        'friends' : ['王大锤', '白元芳'],
        'car':[
            {'brand' : 'Auto', 'max_speed': 120},
            {'brand': 'QQ', 'max_speed': 100},
            {'brand': 'Benz', 'max_speed': 320}
        ]
    }
try:
    with open('data.json', 'w', encoding='utf-8') as fs:
        json.dump(mydict, fs) #将数据编码为json格式
except IOError as e:
    print(e)
print('保存数据完成')
保存数据完成
import json
try:
    with open('data.json', 'r', encoding='utf-8') as fs:
        yourdict = json.load(fs) #将json格式文件解码
        print(type(yourdict))
        print(yourdict)
        
except IOError as e:
    print(e)

<class 'dict'>
{'name': '王星喆', 'age': 38, 'qq': 957658, 'friends': ['王大锤', '白元芳'], 'car': [{'brand': 'Auto', 'max_speed': 120}, {'brand': 'QQ', 'max_speed': 100}, {'brand': 'Benz', 'max_speed': 320}]}
#天行数据
#通过下面的代码实现了从网上下载并保存数据
#URL Uniform Resource Locator 统一资源定位符
#http://api.tianapi.com/meinv/?key=yourkey&num=10
import requests
import json


def main():
    #request/response
    resp = requests.get('http://api.tianapi.com/meinv/?key=yourkeyc&num=10')
    #print(resp.text)#text 拿文本数据, content 拿二进制数据
    mydict = json.loads(resp.text) #加载string,还原成字典
    for tempdict in mydict['newslist']:
        pic_url = tempdict['picUrl'] #获得图片的URL
        resp = requests.get(pic_url) #加载图片
        filename = pic_url[pic_url.rfind('/') + 1 :]
        try:
            with open('E:/meinv/' +filename, 'wb') as fs:
                fs.write(resp.content)
        except IOError as e:
            print(e)


if __name__ == '__main__':
    main()

回顾

函数

  • 名字
  • 参数:默认值,可变参数,关键字参数,命名关键字参数
  • 如果参数中有可变参数,命名关键字参数就不需要加*
  • 返回值

高级函数 - 闭包/偏函数/柯里化/Lambda函数(匿名函数)

嵌套定义

  • 标识符 LEGB作用域-global/nonlocal
#lambda x, y : x + y 匿名函数 x,y是参数

类和对象

  • 单一职责原则

  • 高内聚

  • 迪米特法则(最少知识原则)

  • 低耦合

  • 里氏替换原则

  • 任何时候子类都可以替换父类

  • 开闭原则

  • 对扩展开放,对修改关闭

  • 依赖倒转原则(x)

  • 接口隔离原则(x)

  • 合成聚合复用原则

  • 如果能使用强关联的地方就不要使用继承

GoF设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值