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)
-
合成聚合复用原则
-
如果能使用强关联的地方就不要使用继承