广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3--os模块,模块和包(import... , from..import...)
  • 144
分享到

python3--os模块,模块和包(import... , from..import...)

模块osimport 2023-01-30 21:01:57 144人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

os模块是与操作系统交互的一个接口使用前需要 import osos.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变

os模块是与操作系统交互的一个接口

使用前需要 import os

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.environ  获取系统环境变量

os.path

os.path.abspath(path) 
#返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组
#返回os.path.dirname(path) 返回path的目录。
#其实就是os.path.split(path)的第一个元素 os.path.basename(path) 
#返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
#即os.path.split(path)的第二个元素

os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小


递归实现查看当前目录(包含目录下的目录)下所有文件大小的总和

import os
def get_size(dir):
    sum_size = 0
    for item in os.listdir(dir):  # os.listdir(file)列出指定目录(file)下的所有文件和子目录,包括隐藏文件,并以列表方式打印
        path = os.path.join(dir, item)  # 将多个路径组合后返回(目录+文件)
        # print(path)
        if os.path.isfile(path):  # 判断文件是否存在
            sum_size += os.path.getsize(path)  # os.path.getsize返回文件大小
        else:
            sum_size += get_size(path)
    return sum_size
ret = get_size('D:\Python11_quanzhan')
print(ret)

执行结果

21581084


用栈(先进后出)的方式查看当前目录(包含目录下的目录)下所有文件大小的总和

import os
def get_size(path):
    l = [path]
    sum_size = 0
    while l:
        path = l.pop()
        for item in os.listdir(path):  # os.listdir(file)列出指定目录(file)下的所有文件和子目录,包括隐藏文件,并以列表方式打印
            path2 = os.path.join(path, item)  # 将多个路径组合后返回(目录+文件)
            if os.path.isfile(path2):  # 判断文件是否存在
                sum_size += os.path.getsize(path2)  # 计算文件大小总和
            else:
                l.append(path2)
    return sum_size
print(get_size('D:\python11_quanzhan'))

执行结果

21581560


模块

1 什么是模块?

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀

但其实import加载的模块分为四个通用类别:

1 使用python编写的代码(.py文件)

2 已被编译为共享库或DLL的C或c++扩展

3 包好一组模块的包

4 使用C编写并链接到python解释器的内置模块


2 为何要使用模块?

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块导入导入到其它的模块中,实现了功能的重复利用


3 如何使用模块?

示例: 新建一个模块名test_module.py,内容如下

print('from the test_module.py')

money = 1000

def read1():
    print('read1 :', money)

def read2():
    print('read2----->read1')
    read1()
    
def change():
    global money
    money = 0


模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下,创建一个demo.py文件,导入上面创建的test_module.py文件

import test_module  # 导入test_module模块
# 只在第一次导入时才执行test_module.py内代码,此处的显式效果是只打印一次'from the test_module.py'
# 当然其他的顶级代码也都被执行了,只不过没有显示效果(没有print)
print(test_module.money)  # 打印test_module里面的money变量

执行结果

from the test_module.py

1000


我们可以从sys.modules中找到当前已经加载的模块,sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入


每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

测试一:money与my_module.money不冲突,更改demo.py内容如下

import test_module

money = 10
print(money)  # 打印自己的(demo.py)全局变量money
print(test_module.money)  # 打印test_module里面的全局变量money

执行结果

from the test_module.py

10

1000


测试二:read1与test_module.read1不冲突

import test_module

def read1():
    print('==========')
test_module.read1()  # 执行test_module里面的read1()函数
read1()  # 执行demo里面的read1()函数

执行结果

from the test_module.py

read1 : 1000

==========


测试三:执行test_module.change()操作的全局变量money仍然是test_module中的

import test_module

money = 1
test_module.change()
print(test_module.money)  # test_module中的money
print(money)  # demo中的money

执行结果

from the test_module.py

0

1


总结:首次导入模块test_module时会做三件事

导入一个模块,相当于这个模块从上到下依次被执行了,同一个模块不会被多次导入

1 为源文件(test_module)创建新的名称空间,在test_module中定义的函数和方法若是使用到了global时,访问的就是这个名称空间

2 在新创建的命名空间中执行模块中包含的代码

3 创建名字test_module来引用该命名空间


为模块名起别名:使用了别名,之前的模块名就不能使用了

import test_module as test
print(test.money)

执行结果

from the test_module.py

1000


现在有一个需求,用户可以选择JSON或者pickle (序列化)

大致代码,并不完善(提供一个思路)

inp = input('json or pickle >>>')
if inp == 'json':
    import json as m
elif inp == 'pickle':
    import pickle as m

m.dumps({'k':'v'})
m.loads(...)


在一行导入多个模块

import sys,os,re....


from...import...

对比import test_module,会将源文件的名称空间'test_module'带到当前名称空间中,使用时必须是test_module.(点)名字的方式

而from语句相当于import,也会创建新的名称空间,但是将test_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了

from test_module import read1,read2

这样在当前位置直接使用read1和read2就好了,执行时,仍然以test_module.py文件全局名称空间

测试一:导入的函数read1,执行时仍然回到test_module.py中寻找全局变量money

还是之前的demo.py和 test_module.py文件中测试

from test_module import read1
money = 2000
read1()

执行结果

from the test_module.py

read1 : 1000


测试二:导入的函数read2,执行时需要调用read1(),仍然回到test_module.py中找read1()

from test_module import read1,read2
def read1():
    print('=========')
read2()

执行结果

from the test_module.py

read2----->read1

read1 : 1000


测试三: 导入的函数read1,被当前位置定义的read1覆盖了,覆盖效果

from test_module import read1
def read1():
    print('==========')
read1()

执行结果

from the test_module.py

==========


需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系,如下:

from test_module import money,read1
money = 100  # 将当前位置的名字money绑定到了100
print(money)
read1()  # 读取test_module.py中的名字money,仍然为1000

执行结果

from the test_module.py

100

read1 : 1000


也支持as别名,多行导入

from test_module import read1 as r

from test_module import read1 as r1, read2 as r2, money as m
r1()
r2()
print(m)

执行结果

from the test_module.py

read1 : 1000

read2----->read1

read1 : 1000

1000


from test_module import * 把test_module中所有的不是以下划线 _ ,开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入的名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题

from test_module import *  # 将模块test_module中所有的名字都导入到当前名称空间
print(money)
print(read1)
print(read2)
print(change)

执行结果

from the test_module.py

1000





在test_module.py中新增一行,限制导入的范围

__all__=['money','read1'] # 这样在另外一个文件中用from test_module import * 就只能导入列表中规定的两个名字


思考:假如有两个模块a,b。我可不可以在a模块中import b ,再在b模块中import a?

代码不会发现循环引用问题,模块中的引用不能成环

--结束END--

本文标题: python3--os模块,模块和包(import... , from..import...)

本文链接: https://www.lsjlt.com/news/179049.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3--os模块,模块和包(import... , from..import...)
    os模块是与操作系统交互的一个接口使用前需要 import osos.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变...
    99+
    2023-01-30
    模块 os import
  • 模块,import,from xxx i
    一,模块   模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别:   1,使用python编写的py文件   2,已被变异为共享或者DLL或者C++...
    99+
    2023-01-30
    模块 import xxx
  • python3中_from...import...与import ...之间的区别详解(包/模块)
    目录前言1.import ...2.from ... import ...3.引用也有区别4.引用优化总结前言 【以下说明以tkinter模块为例进行说明】 【下图为安装后在pyth...
    99+
    2022-11-11
  • python3-os模块
    # Auther: Aaron Fanimport oscmd_res1 = os.system("dir")      #执行命令,但是不保存结果cmd_res2 = os.popen("dir").read()   #执行命令,并保存结...
    99+
    2023-01-31
    模块 os
  • python 模块相互import
    模块A中import B,而在模块B中import A。这时会怎么样呢?这个在Python列表中由RobertChen给出了详细解释,抄录如下: [A.py] from B import D class C:pass ...
    99+
    2023-01-31
    模块 python import
  • python导入模块--import--1
        python前面写的程序,后面就可以将它当成一个模块导入,取其精华舍弃不用的随意使用,最理想的情况是任何一个功能,只要写一次,以后所有人都可以任意调用,代码重用性高的可怕,而且python还可以根据需求将C,C+...
    99+
    2023-01-30
    模块 python import
  • python导入模块--import--2
    调用之前写的彩色打印,写个简单的脚本testimport.py实验下在跟之前test_import_color_print.py同级目录下创建testimport.py文件,不然导模块会有问题代码如下#!/usr/bin/python #&...
    99+
    2023-01-30
    模块 python import
  • Python from import导包ModuleNotFoundError No module named找不到模块问题解决
    目录前言场景了解下import和from …import区别importfrom…import分析解决方案方案一(绝对路径)方案二(相对路径, 推荐)参考...
    99+
    2022-11-11
  • python如何使用import模块
    这篇文章给大家分享的是有关python如何使用import模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。import模块在Python经常使用import声明,以使用其他模块...
    99+
    2022-10-19
  • import导入模块,==和is,浅拷贝
    '''import导入模块'''import sysprint(sys.path)sys.path.append('D://ASoft/Python/PycharmProjects')import wisirtestwisirtest.wi...
    99+
    2023-01-30
    模块 import
  • Js模块打包exports require import的用法和区别
    目录1、Commonjs之 exports和require用法1.1 CommonJS导出之module.exports1.2 CommonJS导入之require2、ES6 Mod...
    99+
    2022-11-12
  • Python3之模块、包
    一、模块 1.模块的导入方式 import random,time #导入多个模块 #使用,如:random.randint(1,10) #使用,如:time.sleep(1) from random import randin...
    99+
    2023-01-31
    模块
  • python常见模块之OS模块和time模块
    一、OS模块概述 Python OS模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。 二、常用方法 三、OS模...
    99+
    2022-11-12
  • python中的sys模块和os模块
    目录1.sys模块2.os模块(和操作系统相关数据)1.sys模块 sys模块的常见函数列表: sys.argv: 实现从程序外部向程序传递参数。sys.exit([arg]): 程...
    99+
    2022-11-13
  • 【Python3】Python模块与包
    一、模块导入 1. 定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个...
    99+
    2023-01-31
    模块 Python
  • 怎么在python中使用import导入模块
    这期内容当中小编将会给大家带来有关怎么在python中使用import导入模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scr...
    99+
    2023-06-14
  • Python中怎么使用Import自定义模块
    这篇文章给大家介绍Python中怎么使用Import自定义模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体步骤首先找到当前编辑器(可能会存在多个python解析器)对应的第三方库的安装路径,如果不知道具体的位置,...
    99+
    2023-06-15
  • Python中import模块导入的实现原理
    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入...
    99+
    2023-08-31
    python ai 机器学习 machine learning import 人工智能 ipython 原力计划
  • 详解Node中导入模块require和import的区别
    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用mo...
    99+
    2022-06-04
    详解 模块 区别
  • python中os模块和sys模块怎么使用
    今天小编给大家分享一下python中os模块和sys模块怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、os模块o...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作