Python的零基础内容(四)

day06模块化设计

modules,函数与模块的关系 一个模块中有多个函数。

在Python中一个扩展名为.py的文件就是一个模块

使用模块的好处:

  1. 方便其他程序和脚本的导入并使
  2. 避免函数名和变量名冲突
  3. 提高代码的可维护性
  4. 提高代码的可重用性

自定义模块

1、创建模块,创建一个.py文件就是一个模块

2、导入模块

import 模块名字 [as 别名]导入模块的所有内容

from 模块名称 import 函数/变量/类导入模块的某些内容

import math
print(math.pi)

from math import pi
print(pi)

3、导入自己创建的模块

如果导入的一个文件夹下的模块文件需要将该文件夹设置成Sources Root文件

operation.py

def add(a,b):
    return a+b
def subtract(a,b):
    return a-b
def ride(a,b):
    return a*b

run.py

import operation
print(operation.add(1,3))

也可以利用导入部分内容的方式

from operation import add
print(add(1,3))

以主程序的形式运行

在每个模块的定义中都包括一个记录模块名称的变量_name_,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__

将被导入的模块中的运行程序添加判定条件,只有该模块是以顶级模块运行时才运行此处代码

例如:被导入模块 operation.py

def add(a,b):
    return a+b
def subtract(a,b):
    return a-b
def ride(a,b):
    return a*b
if __name__=='__main__':
    print('嘿嘿,现在operation是以顶级模块运行的哦')

执行模块run.py

import operation
print(operation.add(1,3))

如果不写判定条件,在运行run模块时会显示

"""嘿嘿,现在operation是以顶级模块运行的哦
4
"""

填写判定条件后不在运行导入模块的可执行片段,只有当operation做为运行模块时才会被使用

python中的包

  • 包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下
  • 作用:代码规范,避免模块名称冲突
  • 包和目录的区别:包含_init_.py文件的目录称为包,目录里面通常是不含的。
  • 包的导入 import 包名.模块名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLgiqpY7-1650209983237)(D:\Std\Markdown\photo\目录与包.png)]

import text.moduleA as a 后面的a是嫌弃前面的包名加模块名太长修改的别名

impor只能够导入,包或者模块

而from-import 可以导入模块,导入变量,函数。

python常用的内置模块

模块名描述
sys与python解释器及其环境操作相关的标准库,sys.getsizeof对象所占大小
time提供与时间相关的各种函数的标准库,time.time()现在过了多少秒。time.localtime()将秒转化为年月日小时分钟
os提供访问操作系统服务功能的标准库
calendar提供与日期相关的各种函数的标准库
urllib包用于读取来自网上(服务器)的数据标准库
json用于使用JSON序列化和反序列化对象
re用于在字符串中执行正则表达式匹配和替换
math提供标准算数运算函数的标准库
decimal用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
logging提供了灵活的记录事件、错误、警告、和调试信息等日志信息的功能

第三方模块的安装与使用

安装:pip install 模块名

使用 import 模块名

此处讲的不好:

import schedule
import time
def job():
    print('nennen???')
schedule.every(3).seconds.do(job)
while True:
    schedule.run_pending()
    time.sleep(1)
"""
没3秒打印我们要输出的内容
"""

day06文件操作

编码格式

python的解释器使用的是Unicode(内存)

.py文件在磁盘上使用UTF-8存储(外存)

使用#encoding=GBK可以改变文件的存储方式

IO操作

操作流程

  1. 打开或创建文件
  2. 读写文件
  3. 关闭资源

output是从程序写入到文件,input是从文件中读出数据

首先需要使用内置函数open()创建文件对象,使用IO流将磁盘文件中的内容与程序中的对象中的内容进行同步

语法规则:file =open(文件名 [,mode,encoding])

file=open('a.txt','r')
print(file.readlines())
file.close()
"""
readlines会把全部内容读取,每一行为列表的一项
"""

常见的文件打开方式

按照文件中数据的组织形式,文件分为两大类:

1、文本文件:存储的是普通‘’字符‘’文本,默认是unicode字符集,可以使用记事本程序打开

2、二进制文件:把数据内容用字节进行存储,无法用记事本打开,必须使用专门的软件打开。像.mp3,.jpg,.doc

文件打开方式:

打开模式描述
r以只读的模式打开文件,文件的指针将会放在文件的开头
w以只写模式打开文件,如果文件不存在则创建,如果存在,将覆盖原有内容,文件指针在文件的开头
a以追加的模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,wb,rb
+以读写方式打开文件,不能单独使用,需要与其他模式一块使用,a+

利用二进制实现文件的复制:

src_log=open('f1.png','rb')
target=open('f2.png','wb')
target.write(src_log.read())#读的内容瞬间写进去
src_log.close()
target.close()

文件操作的方法:

方法名说明
read([size])从文件中读取size个字节或字符的内容返回,若省略【size】则读取到文件末尾,一次性读取文件所有内容
readline()从文本文件中读取一行内容
readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)将字符串str内容写入文件
writelines(s_list)字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence])把文件指针移动到新的位置,offset表示相对于whence的位置:
offset:为正往结束方向移动,为负,往开始方向移动。一个中文占两个字节
whence不同的值表示不同的含义:
0:从头,1从当前啊,2从末尾
tell()返回文件指针当前位置,从0开始计算
flush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源。
file=open('a.txt','a+',encoding='utf-8')
lis=['hello','world']
file.writelines(lis)
file.seek(0,0)
print(file.read())#全部读出
file.seek(0,0)
print(file.readline()) #读一行
file.seek(0,0)
print(file.readlines()) #读所有行存在列表
print(file.tell()) 
file.close()
"""
中国
你好helloworld
中国

['中国\n', '你好helloworld']
24
"""

with语句

可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的;

离开with语句会自动关闭文件释放资源

with open('文件名','rb') as file:
    print(file.read())

如果一个类对象实现了__enter__()__exit__()方法则称该类对象遵守了上下文管理器协议

该类的实例对象,被称为上下文管理器

class MyContentMgr:
    def __enter__(self):
        print('enter执行')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit执行')
    def show(self):
        print('show执行')
with MyContentMgr() as file:
    file.show()
"""
enter执行
show执行
exit执行
"""

复制二进制文件,无需手动书写关闭,且出现异常情况也会先关闭文件

with open('f1.png','r') as scr_log:
    with open('f2.png','w') as target_log:
        taeget_log.write(scr_log.read())

目录操作

  • os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不同。

  • os模块与os.path模块用于对目录或文件进行操作

函数说明
getcwd()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[,mode])创建目录
makedirs(path1/path2…[,mode])创建多级目录
rmdir(path)删除目录
removedirs(path1/path2…)删除多级目录
chdir(path)将path设置为当前工作目录
walk(payh)返回一个元组,包含所有文件夹和文件对象
import os
#打开记事本os.system('notepad.exe')
#打开计算机os.system('calc.exe')
#打开指定可执行文件 os.startfile('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
print(os.getcwd())
print(os.listdir('../Day01'))
#改变路径
os.chdir('D:\\pycharmProject\\Day01')
"""
D:\pycharmProject\Day01
['a.txt', 'dierctory', 'operation.py', 'text', 'txte.py', '__pycache__']
D:\pycharmProject\Day01
"""

os.path

函数说明
abspath(payh)用于获取文件或目录的绝对路径
exists(path)用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path,name)将目录与目录或者文件名拼接起来
splitext()分离文件名和扩展名,split将目录与文件拆分,返回一个元组
basename(path)从一个目录中提取文件名
dirname(path)从一个路径中提取文件路径,不包括文件名
isdir(path)用于判断是否为路径
import os
path=os.getcwd()
lst_files=os.walk(path)#返回来是一个元组,包含文件夹和所有文件
for dirpath,dirname,filename in lst_files:
    print(dirpath)
    print(dirname)
    print(filename)
    print('-----------------------------------------------------')
    for dir in dirname:
        print(os.path.join(dirpath,dir))##所有文件夹路径
    for file in filename:
        print(os.path.join(dirpath,file)) #所有文件路径
    print('-------------------------------------------------------')
    ##walk递归文件系统

问题:要求列出指定目录下py文件

import os
path=os.getcwd()
lst_files=os.walk(path)#返回来是一个元组,包含文件夹和所有文件
for dirpath,dirname,filename in lst_files:#filename是一个文件名列表
    for item in filename:#item是一个str
       if '.py' in os.path.splitext(item):#分离出的文件名和文件后缀存放在一个元组上
           print(item)
"""
operation.py
txte.py
1.py
2.py
3.py
sub1.py
__init__.py
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值