函数模块
1. 什么是模块:一个.py文件就是一个模块
2.import:可以通过import关键字导入其他的模块
import 模块名(.py文件名)
直接导入模块的时候,相当于把被导入模块里面的内容放到了import的位置
3.怎么使用模块中的内容?什么内容可用
- import 模块名 → 导入模块所有内容
- 模块名. 使用模块中的内容
在模块中声明全局变量都可以使用(普通变量,函数,类)
import Other
Other.funOther()
print(Other.name)
print(Other.aa)
4.from 模块 import 内容列表 → 导入模块指定内容
使用导入的内容时,不用再加模块名.
from Other2 import * # 导入Other2.py 所有内容
fun2Other()
5.阻止被导入模块中不需要的代码被执行
- 一般情况下,除了函数的声明和类声明以外,其他的代码都放到if中(或者if的函数中)
- name:每个模块自带的一个属性,是用来保存当前这个模块的名字,但是当正在执行当前模块的时候,这个属性的值是固定的'main'
print('___', Other.__name__)
print(__name__)
此函数下的内容不会被其他模块导入执行
if __name__ == '__main__':
name2 = 999
print(name2)
- 使用 as重命名
- import 模块名 as 新名字
- from 模块名 import 内容 as 新名字
import math as mm
from math import sqrt as sq
print(mm.sqrt(144))
print(sq(169))
case:使用一个模块用来管理所有和形状相关的功能(求圆的周长/面积,求举行周长和面积)
import shape
shape.getArea()
shape.getLength()
基本文件操作
- (所有)文件操作流程: 打开文件 → 操作文件(R/W) → 关闭文件
1.打开文件
- open(path,falg,[encoding],[errors])
- path:打开的文件路径(必须传值)
- flag:打开方式(默认为r)
- r 以只读方式打开文件,文件的描述符放到文件的开头,读出是字符串
- rb/br 以二进制格式打开一个文件用于只读,文件的描述符在开头
- r+ 打开一个文件用于读写,文件描述符位于开头
- w 打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件,写>字符串
- wb/bw 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件
- w+ 打开一个文件用于读写
- a 打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
- a+
- encoding:编码方式(常用utf-8/gbk)(针对文本文件读写/不同操作系统默认的文本编码方式不同)
- errors:错误处理
2.文本文件的读操作
- a.放在工程外面的文件,写绝对路径 'D:\MyCourse\Cultivate\day09\test.txt'
# open('D:\MyCourse\Cultivate\day09\test.txt')
- (推荐) b.将文件放到工程目录下的某个位置,写相对路径(相对于工程目录):./相对路径(工作目录下相对路径) 或者 ../相对路径(工程目录上级文件)
filePath = r'D:\MyCourse\Cultivate\day09\test.txt'
open('./day09/test.txt')
open('./day09/text/test2.txt')
# 2.1 打开文件
注意:以读的方式打开文件,如果这个文件不存在,会报FileNotFoundError;
以写的方式打开,如果不存在则创建新文件
# 2.1打开文件,返回文件句柄
f1 = open('./day09/test.txt', 'r', encoding='utf-8')
# 2.2读文件(获取文件内容)
content = f1.read() # 文件.read():获取文件内容,并且返回 n:设置读的长度
print(content, type(content))
# 2.3 关闭文件
f1.close()
3.文本文件的读操作
# 3.1 打开文件
w操作会覆盖之前的内容,没有文件则会创建
a在原本内容后面添加新的数据,没有文件则会创建
f2 = open('./day09/text/test2.txt', 'a', encoding='utf-8')
# 3.2 写操作
f2.write('Hello world')
# 3.3 关闭文件
f2.close()
4.二进制文件的读写操作
- 音频,视频,图片等都是
f3 = open('./day09/14.jpg', 'rb')
# 读文件
imageData = f3.read()
# bytes:python中二进制数据对应的数据类
print(type(imageData))
# 关闭文件
f3.close()
f4 = open('./day09/4.png', 'wb')
f4.write(imageData)
f4.close()
5.通过with关键字操作文件
with open() as 文件句柄:
文件操作
- 在文件操作结束后自动关闭文件
with open('./day09/111.MP4', 'rb') as f5:
videoData = f5.read()
with open('./day09/666.avi', 'wb') as f6:
f6.write(videoData)
if __name__ == '__main__':
main()
json文件
json文件(文本):文件后缀是.json,内容必须是json格式
- json格式:
- a.内容是字符串
- b.最外层是字典,字典里面必须是键值对
- c.最外层是列表,列表里面内容必须是数组数据
最外层只能是字典/数组/字符串
-
数据类型:字符串("aaa"),数字(123,12.3),布尔值(true/false),数组([1,2,3,"abc"])),null(None)
-
json是python中内置模块,用来处理json数据
import json
1.json文件读操作
with open('./day09/test.json', 'r', encoding='utf-8') as f1:
# 直接使用read()获取到的是字符串数据,包含json文件的所有内容包括注释等
content = f1.read()
print(type(content), content)
# load(文件对象):获取指定json文件中的内容 返回值的类型是json文件最外层对应的数据类型
content = json.load(f1)
print(type(content), content, content['score'][1])
2.json文件写操作
with open('./day09/test1.json', 'w', encoding='utf-8') as f2:
'''
#写数据
dump(内容,文件句柄)
'''
writeContent = [{'name': '001', 'age': 10}, {'name': '002', 'age': 15}]
json.dump(writeContent, f2)
# case:输入学生的姓名和电话,保存到本地,(下次启动还在)
try:
with open('./day09/info.json', 'r') as f4:
list1 = json.load(f4)
except Exception:
list1 = []
name = input('name:')
tel = input('tel:')
info = {'name': name, 'tel': tel}
list1.append(info)
with open('./day09/info.json', 'w') as f3:
json.dump(list1, f3)
print(list1)
3.json模块的其他操作
- loads(字符串,编码方式) → 将指定的字符串,转化成json数据
- 将字符串转化为字典/列表
content = json.loads('"aaa"', encoding='utf-8') # 字符串格式必须是json格式
print(content, type(content))
# dumps(对象)
# 将json对象转换成json字符串
# 字典/列表转换成json字符串
content = json.dumps(['aaa', 2, True])
print(content, type(content))
if __name__ == '__main__':
main()
异常处理
- 出现错误时不想让程序崩溃,就要进行异常捕获
try:
需要捕获异常的代码
except (错误类型)):
如果出现异常会执行的代码/捕获到指定错误类型才执行的代码
def main():
try:
with open('aaa.txt') as f:
pass
except Exception:
print('错了')
if __name__ == '__main__':
main()
作业
主函数文件
from Util import * # 导入所有的方法
import os # 导入os来拼接路径
def main():
content = '"aaaaa"' # 单引号套双引号字符串,符合json格式
url = os.path.join(os.path.join(os.getcwd(), 'day09'), 'test.txt') # 拼接路径
# 调用函数以及查看结果
writeFile(content, url)
readFile(url)
print(str2Json(content))
print(obj2Json({'a': 1, 'b': 2}))
print(getC(a=1, b=2))
print(getC(r=3))
print(getArea(a=1, b=2))
print(getArea(r=4))
if __name__ == '__main__':
main()
Util.py (方法很简单就不注释了)
'''
@Author: Kris Shin
@Date: 2018-07-26 20:21:59
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-26 20:21:59
'''
import math
import json
def readFile(url):
try:
with open(url) as f:
list1 = f.read()
print(list1)
return list1
except FileNotFoundError:
print('路径错误')
def writeFile(data, url):
with open(url, 'w') as f:
f.write(data)
print('写入完成')
return 1
def getArea(a=0, b=0, r=0):
if a or b:
return a * b
if r:
return math.pi * r**2
def getC(a=0, b=0, r=0):
if a or b:
return 2 * (a + b)
if r:
return 2 * math.pi * r
def str2Json(data):
return json.loads(data, encoding='utf-8')
def obj2Json(data):
return json.dumps(data)
网友评论