# python中os.path以及sys.path模块简介
# 1.sys.path —— 动态地改变Python搜索路径 #sys.path模块是动态的修改系统路径
# 如果python中导入的package或module不在环境变量PATH中,
# 那么可以使用sys.path将要导入的package或module加入到PATH环境变量中。
'''
import sys
sys.path.append(’引用模块的地址')
#或者
import sys
sys.path.insert(0, '引用模块的地址')
'''
# sys.path是个列表,所以在末尾添加目录是很容易的,
# 用sys.path.append就行了。当这个append执行完之后,
# 新目录即时起效,以后的每次import操作都可能会检查这个目录。
# 如同解决方案所示,可以选择用sys.path.insert(0,…)这样新添加的目录会优先于其他目录被import检查。
# 即使sys.path中存在重复,或者一个不存在的目录被不小心添加进来,
# 也没什么大不了,Python的import语句非常聪明,它会自己应付这类问题。
# 但是,如果每次import时都发生这种错误(比如,重复的不成功搜索,操作系统提示的需要进一步处理的错误),
# 我们会被迫付出一点小小的性能代价。
#
# 程序向sys.path添加的目录只会在此程序的生命周期之内有效,
# 其他所有的对sys.path的动态操作也是如此。
# 补充:
# 1、模块要处于Python搜索路径中的目录里才能被导入,
# 但我们不喜欢维护一个永久性的大目录,
# 因为其他所有的Python脚本和应用程序导入模块的时候性能都会被拖累。
'''
import sys
for i in sys.path:
print(i)
输出:
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36\python.exe C:/Users/derezzed/Desktop/python/homeworks/模块导入引用/test1.py
# C:\Users\derezzed\Desktop\python\homeworks\模块导入引用
# C:\Users\derezzed\Desktop\python
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36\python36.zip
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36\DLLs
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36\lib
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36
# C:\Users\derezzed\AppData\Local\Programs\Python\Python36\lib\site-packages
'''
# 以上输出是python的sys.path的路径列表,它是一个list。
# 默认情况下python导入文件或者模块的话,他会先在sys.path里找模块的路径。
# 如果没有的话,程序就会报错。
#
# 而且当前脚本的路径默认会在这个list里面,
# 比如:C:\Users\Administrator\Desktop\pythontest。
# 所以当前脚本import 模块(通常是脚本文件),
# 如果是这个脚本当前目录的情况下,是不会报错的(报错信息:找不到模块)。
# 2.python中获取当前工作目录
'''
import os
curDir = os.getcwd()
print(curDir)
'''
# 3.os.path模块
'''
os.path.abspath(path) #返回绝对路径
os.path.split(path #将path分割成目录和文件名二元组返回
os.path.dirname(path) #返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) #返回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.getatime(path) #返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间
s.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。
>>> os.path.join('c:\\', 'csv', 'test.csv')
'c:\\csv\\test.csv'
>>> os.path.join('windows\temp', 'c:\\', 'csv', 'test.csv')
'c:\\csv\\test.csv'
>>> os.path.join('/home/aa','/home/aa/bb','/home/aa/bb/c')
'/home/aa/bb/c'
'''
# 4.python中type()函数可以查看一个python对象的数据类型
#
#
# 5.python中没有null,但是None。python中None的含义和其他语言中null是一样的。
# 6.sys.modules 的作用
#
# 既然python是在 sys.path 中搜索模块的,那载入的模块存放在何处?
# 答案就是 sys.modules,是存放已载入模块的地方。
# 模块一经载入,python 会把这个模块加入 sys.modules 中供下次载入使用,
# 这样可以加速模块的引入,起到缓存的作用。
#
'''
>>> import sys
>>> sys.modules['tornado']
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'tornado'
>>> import tornado
>>> sys.modules['tornado']
<module 'tornado' from '/Users/x/python_dev/lib/python2.7/site-packages/tornado/__init__.pyc'>
'''
# 前面说过python 解释器启动之后,会把预先载入 built-in module,可以通过 sys.modules 验证。
'''
>>> sys.modules['os']
<module 'os' from '/Users/x/python_dev/lib/python2.7/os.pyc'>
>>>
'''