python3学习笔记 ------ sys 模块和 os 模块 以及模块中特殊变量

一、本文内容                                                                                                          

1、python模块中的特殊变量
2、模块概述
3、sys模块
4、os模块

二、python模块中的特殊变量                                                                                

import s2 
print(vars(s2))	# 返回模块s2里的所有变量

· __doc__  : 获取文件的注释,用于获取函数的文档说明

#  momodule.py
"""This is the module docstring."""

def f(x):
    """This is the function docstring."""
    return 2 * x
#  执行
>>> import mymodule
>>> mymodule.__doc__
'This is the module docstring.'
>>> mymodule.f.__doc__
'This is the function docstring.'

· __cached__ :  #指定pycache字节码的路径

· __file__ : __file__ : 获取当前运行文件的路径,即当前py文件的路径

  常用于 sys.path.append()

os.path.abspath(__file__)	#绝对路径
os.path.dirname()	        #找到某个文件的上级目录
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))	                #当前文件的上级目录的上级目录
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))	#添加当前文件的上级目录的上级目录,当写bin(可执行文件)时记得添加。

· __package__ : 当前文在所在的包

from bin import admin
#打印当前包
print(__package__)
#打印admin中的包
print(admin.__package__)

· __name__ :# 一般在主文件中使用,只有执行当前文件时,当前文件的特殊变量__name__ == "__main__" ,被别人导入则不等

def run():
	pass
	
if __name__ == "__main__"
	run()
# 只有你执行:python s1.py时执行run方法,别人导入s1模块则不执行,要执行必须调用的原因

三、模块概述                                                                                                         

模块:用一坨代码实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块

模块分为三种:

  • 自定义模块
  • 第三方模块
  • 内置模块

导入模块的几种方式:

import module
from module.xx.xx import xx
from module.xx.xx import xx as rename 
from module.xx.xx import *

导入模块其实就是告诉Python解释器去解释那个py文件

  • 导入一个py文件,解释器解释该py文件
那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
>>> import sys
>>> print(sys.path)
['', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32\\lib', 'C:\\Users\\87955\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\Pythonwin']
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
import sys
import os
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_path)

四、sys 模块                                                                                                          

用于提供python解释器相关的操作。

sys.argv       # 命令行参数list,第一个元素是程序本身路径

sys.exit(n)    # 退出程序,正常退出时exit(0)

sys.version    # 获取python解释程序的版本信息

sys.maxint     # 最大的int值

sys.path       # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform   # 返回操作系统平台名称

sys.stdin      # 输入相关

sys.stdout     # 输出相关

sys.stderror   # 错误相关

进度条,进度百分比实现方式:

# python3.6
import time
import sys 

def view_bar(num,total):
    rate = float(num)/float(total)
    rate_num = int(100 * rate)
    # 数字进度显示,显示条, \r 表示回到行首
    r = "\r%s>%d%%"%("="*num,rate_num)
    sys.stdout.write(r)	# 输出不换行
    sys.stdout.flush()	# 刷新输出
	

if __name__ == "__main__"
    for i in range(0,101)
	time.sleep(0.1)		# 暂停0.1s
	view_bar(i,100)

下面是其全部方法:原文: http://blog.csdn.net/Rozol/article/details/72427935

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/8'
# sys_demo.py sys解释器相关函数
# 该模块含有解释器的一些变量,与解释器交互的函数


import sys


def sys_demo():
    # 默认编码
    print(sys.getdefaultencoding())

    # Python版本
    print(sys.version)

    # 添加模块路径到搜索路径
    sys.path.append("./module")

    # (函数)打印异常信息
    try:
        1 / 0
    except:
        types, value, back = sys.exc_info()  # 捕获异常
        sys.excepthook(types, value, back)  # 打印异常

    # 输入和输出
    sys.stdout.write(">> ")
    sys.stdout.flush()
    strs = sys.stdin.readline()[:-1]
    sys.stderr.write("输入的内容为: {}".format(strs))
    sys.stderr.flush()


def sys_func():
    lists = sys.argv  # 传递给Python脚本的命令行参数列表 => python p.py -> ['p.py'] / python p.py a 1 -> ['p.py', 'a', '1'] / 程序内执行 -> ['']
    strs = sys.getdefaultencoding()  # 默认字符集名称
    strs = sys.getfilesystemencoding()  # 系统文件名字符集名称
    num = sys.getrefcount(object)  # 返回object的引用计数(比实际多1个)
    dicts = sys.modules  # 已加载的模块, 可修改, 但不能通过修改返回的字典进行修改
    lists = sys.path  # 模块搜索路径
    sys.path.append("./test")  # 动态添加模块搜索路径
    strs = sys.platform  # 平台标识符(系统身份进行详细的检查,推荐使用) Linux:'linux' / Windows:'win32' / Cygwin:'cygwin' / Mac OS X:'darwin'
    strs = sys.version  # python解释器版本
    lists = sys.thread_info  # 线程信息
    num = sys.api_version  # 解释器C API版本

    types, value, back = sys.exc_info()  # 捕获异常 详见 异常 文章的 excep() 代码块第二小部分(http://blog.csdn.net/rozol/article/details/69313164)
    sys.excepthook(types, value, back)  # 打印异常
    types = sys.last_type
    value = sys.last_value
    back = sys.last_traceback
    # sys.exit([arg]) // 引发SystemExit异常退出Python(可以try), 范围[0,127], None==0, "string"==1
    sys.exit(0)

    num = sys.getrecursionlimit()  # 最大递归数(堆栈最大深度), 详见 函数 文章(http://blog.csdn.net/rozol/article/details/69242050)
    sys.setrecursionlimit(5000)  # 修改最大递归数

    fnum = sys.getswitchinterval()  # 获取线程切换间隔
    sys.setswitchinterval(0.005)  # 设置线程切换间隔, 单位秒
    num = sys.getcheckinterval()  # 解释器的检查间隔
    sys.setcheckinterval(100)  # 设置解释器检查间隔, 执行(默认)100个虚拟指令执行一次检查, 值为<=0时,检查每个虚拟指令

    # sys.stdin // 标准输入流
    strs = sys.stdin.readline()[:-1]
    # sys.stdout // 标准出入输出
    sys.stdout.write(">>")
    sys.stdout.flush()
    # sys.stderr // 标注错误流
    sys.stderr.write(">>")

    # ---

    lists = sys.builtin_module_names  # 所有模块 (注:非导入模块)
    path = sys.base_exec_prefix  # Python安装路径
    path = sys.base_prefix  # 同base_exec_prefix
    path = sys.exec_prefix  # 同base_exec_prefix
    path = sys.prefix  # 同base_exec_prefix
    path = sys.executable  # Python解释器的绝对路径

    strs = ys.byteorder  # 本机字节顺序指示器, big-endian(最高有效字节在第一位)值为'big', little-endian(最低有效字节在第一位)值为'little'
    strs = sys.copyright  # python版权
    num = sys.hexversion  # 16进制版本号
    lists = sys.implementation  # 当前运行的解释器的信息
    num = sys.getallocatedblocks()  # 解释器当前分配的内存块的数量
    boolean = sys.dont_write_bytecode  # 是否不会尝试导入源模块是写入.pyc文件 (False会写入.pyc文件)
    # sys.getsizeof(object[, default]) // 返回对象的大小bit, 只计算自身内存消耗,不计算引用对象的内存消耗, 调用对象的__sizeof__(), default没有获取到默认返回值
    num = sys.getsizeof(object)
    boolean = sys.is_finalizing()  # 解释器是否正在被关机
    num = sys.maxsize  # 最大整数值(2 ** 31 -1), 与系统有关
    num = sys.maxunicode  # 最大Unicode值的整数 (1114111)
    strs = sys.ps1  # 解释器主提示符
    strs = sys.ps2  # 解释器次提示符

    sys.call_tracing(func, ("arg",))  # 调用函数
    sys._clear_type_cache()  # 清除内部类型缓存
    sys._debugmallocstats()  # 打印CPython内存分配器状态的低级信息

    sys.setprofile(profilefunc)  # 设置profile函数, 默认None
    sys.getprofile()  # 获取profile函数
    sys.settrace(tracefunc)  # 设置跟踪函数, def tracefunc(frame、event 和arg):
    sys.gettrace()  # 获取跟踪函数, 默认None
    sys.set_coroutine_wrapper(wrapper)  # 设置包装 def wrapper(coro):
    sys.get_coroutine_wrapper()  # 包装, 默认None


if __name__ == "__main__":
    sys_demo()

    # sys_func()

五、os 模块                                                                                                            

用于提供系统级别的操作。

os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
os.curdir                   返回当前目录: ('.')
os.pardir                   获取当前目录的父目录字符串名:('..')
os.makedirs('dir1/dir2')    可生成多层递归目录
os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()                 删除一个文件
os.rename("oldname","new")  重命名文件/目录
os.stat('path/filename')    获取文件/目录信息
os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep                  用于分割文件路径的字符串
os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")   运行shell命令,直接显示
os.environ                  获取系统环境变量
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.abspath(path)       返回path规范化的绝对路径
os.path.split(path)         将path分割成目录和文件名二元组返回
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值