python3 重要知识点4

本文介绍了Python3中的重要知识点,包括os模块的基本文件操作(重命名、删除、创建文件夹),异常处理机制(try-except结构),以及模块导入和包的使用,例如如何导入和重命名模块中的函数,以及如何使用__name__变量判断主模块。
摘要由CSDN通过智能技术生成

python3 重要知识点4

https://www.bilibili.com/video/BV1NM4y1K73T?p=55&vd_source=3a0569e60d1fce4262459761acb1a23c

跟着视频学习,重要知识点如下:

1.文件重命名、删除等相关操作:
python的os模块有这些功能,所以要先导包 import os

一、重命名:
os.rename(“要修改的文件”,“新文件”)
二、删除文件:
os.remove(“要删除的文件”)
三、创建文件夹:
os.mkdir(“文件夹”)

import os
os.rename("write.txt","毕业论文.txt") #没有了write.txt.目录里只有毕业论文.txt
os.mkdir('a') #创建了一个以a命名的文件夹

四、获取当前目录 getcwd()
五、改变默认目录 chdir(“相对路径”)
六、获取文件列表 listdir(“相对路径”)
七、删除文件夹 rmdir(“文件夹名”)

import os
print(os.getcwd())  #获取当前目录
os.chdir("../") #改变默认目录,..指上一级目录
print(os.getcwd())  #输出:D:\0postgraduate1\code
os.chdir("./autoTest23_11_25")
print(os.listdir("./")) #列出当前目录下所有文件
os.rmdir("./a")  #删除了文件夹a

输出:
D:\code\auto
D:\code
[‘.idea’,‘01文件操作.py’,‘test.txt’,‘函数.py’]

2.批量修改
rename() 重命名,用for 循环可以实现批量修改

import os
# os.mkdir("aa")
dirpath = "./aa/"  #路径  
# 注意:一定要写成"./aa/",不能写成"./aa",否则dirpath+name会出错
listName = os.listdir(dirpath) #文件列表
print(listName)  #打印列表
print(os.getcwd())  #获取路径
#重命名
for name in listName:
    newName = "[胖达出品]-"+ name  #新名字
    os.rename(dirpath+name,dirpath+newName)
print(listName)  #打印列表

输出:
[‘a1.txt’, ‘a2.txt’, ‘a3.txt’, ‘a4.txt’]
D:\0postgraduate1\code\autoTest23_11_25 ->说明不在aa文件夹里,这是aa的上一级地址
[‘[胖达出品]-a1.txt’, ‘[胖达出品]-a2.txt’, ‘[胖达出品]-a3.txt’, ‘[胖达出品]-a4.txt’]

3.异常
指当python检测到一个错误后,解释器就无法继续执行了,反而出现了一些错误的提示。
try: 放可能出现问题的代码,出现异常后,try里面之后的代码就不执行了,进而执行except里的代码。
except: 添加处理异常的方法,可以添加pass,即什么都不做,冒号前可以添加抓住的异常名字,如IOError,这是输入输出异常,或者写多个异常,用元组的形式,如except (IOError,NameError,ZeroDivisionError):。或者写except Exception: 可以捕获所有异常,不写也是捕获所有异常,但就不知道到底是什么地方出现了异常。
else: 如果没有捕获到异常,那就执行else中的事情。
finally: 无论异常是否产生都要执行的代码。比如文件关闭、释放锁、把数据库连接返还给连接池等

可以给异常起别名: except Exception as e:

filename = input("请输入文件名称:")
try:
    f = open(filename,"r")   #没有异常就执行完,有就中断,被except捕捉
except Exception as e:  #其实这里捕捉到了IOError
    print("出现了错误,但是被我抓住了",e)  #有异常就执行
else:  
    print("没有异常")  #没有异常就执行
    print(f.read())
    f.close()
finally:
    print("测试结束")  #一定会执行
print("哈哈哈")

打印:
请输入文件名称:test.txt
没有异常
hhhhhhhhhhhh ----->这是test.txt文件的内容
测试结束
哈哈哈

或者打印:
请输入文件名称:test1.txt ----->我没有创建过这个文件
出现了错误,但是被我抓住了 [Errno 2] No such file or directory: ‘test1.txt’
测试结束
哈哈哈

4.异常传递
异常嵌套,保证如果内部try没有抓到异常,最外层的try也会抓到异常。
如果

def test1():
    print("----test1-1----")
    print(1/0)
    print("----test1-2----")
def test2():
    print("----test2-1----")
    test1()
    print("----test2-2----")
def test3():
    try:
        print("----test3-1----")
        test1()
        print("----test3-2----")
    except Exception as result:
        print("捕捉到了异常,信息是:%s" %result)
    print("----test3-3----")
test3()
print("-------------")
test2()

#输出:
----test3-1----
----test1-1----
捕捉到了异常,信息是:division by zero
----test3-3----
-------------
----test2-1----
----test1-1----
ZeroDivisionError: division by zero 

5.抛异常

引发一个异常,异常必须有名字,为Exception类的子类
在try里面加raise 异常名,如raise IOError
或者自定义异常名,如:

class ShortInputException(Exception):
    def __init__(self,length,athleast):
        self.length = length
        self.athleast = athleast
def main():
    try:
        s = input("请输入:")
        if len(s) < 3:
            raise ShortInputException(len(s),3)
    except ShortInputException as result:
        print("shortInputException:输入的长度是%d,长度至少是%d" %(result.length,result.athleast))
    else:
        print("没有异常")
main()

#输出:
请输入:12
shortInputException:输入的长度是2,长度至少是3
#或者输出:
请输入:3 4
没有异常

6.模块与包

一、导入模块:

C语言要引用sqrt函数,必须用 #include <math.h> 引入math头文件,但是
Python中,引入函数采用引入math模块的方法,

模块类似于C语言的头文件或JAVA的包,类似于工具包,要使用工具包里的工具(函数),就用import导入这个模块,模块在当前的搜索路径就会被导入。调用模块里的函数,需要这样引用,模块名.函数名

from time import sleep #导入模块里的函数
sleep(1)

或者:

import time #导入模块
time.sleep(1)

定位模块: python解析器的搜索顺序是:当前目录–》
在shell变量PYTHONPATH下的每个目录–》
查看默认路径,unix下默认路径一般是/uar/local/python–》
模块搜索路径存在system模块的sys.path变量中,变量里包含当前目录,pythonpath和由安装过程决定的默认目录

测试模块: 自定义模块内都会加上测试信息,如:
新建demo01.py,内容如下:

def add(a,b):
    return a+b
#用来测试
if __name__ == '__main__':  #打出main会自动出现这一行的选项,选择即可
    ret = add(12, 22)
    print("Int demo01,py file,,,12+22=%d" % ret)
    #__name__记录当前运行的模块,__main__就是主模块。
    print("Int demo01,py file,,,__name__", __name__)
    
#在demo01运行后结果为:
Int demo01,py file,,,12+22=34
Int demo01,py file,,,__name__ __main__

再新建demo02.py,内容如下:

import demo01
ret = demo01.add(10,20)
print("Int demo02,py file,,,12+22=%d" %ret)
print("Int demo02,py file,,,__name__",__name__)

#在demo02运行后结果为:
Int demo02,py file,,,12+22=30
Int demo02,py file,,,__name__ __main__
#如果demo01不加if __name__ == '__main__',就会把demo01的测试信息也全部打印了,因为不限制在主模块内才测试的话,导入进其他文献里面,会将demo01的代码全部运行完,也就意味着demo02的运行结果里会多出demo01的测试信息。

ps : __name__记录当前运行的模块,__main__就是主模块。

二、导入包

新建包:
右键–》new–》Python Package–》输入包名bbb–》回车
新建的bbb包里会有一个__init__.py的文件
(如果:右键–》new–》directory–》输入aaa–》回车,没有init文件)

然后在包里新建模块:
右键bbb包–》new–》python file --》recvmsg
右键bbb包–》new–》python file --》sendmsg
recvmsg.py内容:

def recvmsg():
    print("接收到了信息")

sendmsg.py内容:

def sendmsg():
    print("发送信息")

demo02.py内容:

from bbb import recvmsg
from bbb import sendmsg
sendmsg.sendmsg()
recvmsg.recvmsg()

或者demo02.py内容是:

from bbb import *  #如果想用这中方式,去导入bbb全部模块,就需要在__init__.py文件里写入__all__ = ['recvmsg','sendmsg']
sendmsg.sendmsg() 
recvmsg.recvmsg()

运行demo02.py,以上两个输出结果均为:
发送信息
接收到了信息

ps 一般不用*,一般精准导入,因为几个模块内部如果是重名函数,不好区分导入的是谁
ps 要导入多个模块,可以用这种方式:
from bbb import recvmsg, sendmsg
ps 害怕重名,可以重新命名,如:
from bbb import recvmsg as r

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值