美文网首页
2018-07-26 day09 函数模块文件及异常处理

2018-07-26 day09 函数模块文件及异常处理

作者: Kris_Shin | 来源:发表于2018-07-26 19:33 被阅读0次

函数模块

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)

相关文章

  • 2018-07-26 day09 函数模块文件及异常处理

    函数模块 1. 什么是模块:一个.py文件就是一个模块 2.import:可以通过import关键字导入其他的模块...

  • 2019-05-25 巩固

    文件 异常 函数 模块 三个库(numpy/matplotlib/pandas) 数据预处理 找案例练习 1、20...

  • Python学习总结

    数据类型 循环和分支 列表 元组、字符串 序列 函数 字典 文件 异常处理 类和对象 模块

  • python语法入门四

    文件 os + time模块 pickle模块 异常 文件 os + time模块 pickle模块 异常

  • Day9

    Day9 01.模块管理函数和类 02.基本文件操作 03.json 文件 04.异常捕获 01.模块管理函数和类...

  • Python—处理文件(mimetypes和chardet)

    处理文件时minetype和chardet是很好用的两个模块函数: chardet:主要处理文件文件编码问题示例....

  • nodejs——fs模块

    fs模块包含所有文件查询和处理的相关函数,用这些函数,可以查询文件信息,读写和关闭文件。 使用fs.stath函数...

  • python绝技:黑客篇-第一章

    本书第一章主要介绍了python的基础知识,包括变量、数据类型、函数、迭代、判断语句、语句块、异常处理及常用模块的...

  • python异常处理及内置模块

    异常处理 有时候我们在写程序的时候会出现错误或者异常,导致程序终止,如下这个例子: 上面提示被除数不能为0,从而导...

  • 文件处理 及os模块

    文件1.打开open(文件名,访问模式)r 只读指向文章开头w 可写 如果文件存在就覆盖如果文件不存在就新建开头写...

网友评论

      本文标题:2018-07-26 day09 函数模块文件及异常处理

      本文链接:https://www.haomeiwen.com/subject/jacimftx.html