#16 os&sys模块
前言
在编写Python程序的时候,可能需要和操作系统进行交互,比如获取某个目录下的内容、更改运行目录、更改环境变量等操作。在Python中有两个模块将这些问题完美解决,一起看看哇!
一、os模块
os模块提供一个和操作系统的接口,想要完全了解它,需要查看它的官方文档:https://docs.python.org/3.5/library/os.html
这里列出一些常用的方法:
In [3]: import os # 导入os模块 In [4]: os.sep # 该操作系统特定的路径分隔符 Out[4]: '/' In [5]: os.linesep # 该操作系统的行分隔符 Out[5]: '\n' In [6]: os.pathsep # 该操作系统用于分割文件的分隔符 Out[6]: ':' In [7]: os.name # 返回当前系统所使用的平台(win返回nt,linux返回posix Out[7]: 'posix' In [8]: os.environ # 输出系统环境变量
In [9]: import os In [10]: os.getcwd() # 获取当前工作目录 Out[10]: '/Users/minutesheep' In [11]: os.pardir # 输出上级目录 '..' Out[11]: '..' In [12]: os.curdir # 输出当前目录 '.' Out[12]: '.' In [13]: os.mkdir('test') # 创建一个文件夹,只能创建一个 In [15]: os.makedirs('test1/test2/test3') # 递归创建文件夹 In [16]: os.listdir() # 列出当前目录所有文件 In [17]: os.rmdir('test') # 删除一个空文件夹,只能删除一个 In [19]: os.removedirs('test1/test2/test3') # 递归删除空文件夹,如果上级文件夹也为空,也删除 In [20]: os.chdir('..') # 改变工作目录 In [21]: os.getcwd() # 可以看到改变了 Out[21]: '/Users' In [24]: os.system('touch test.py') # 执行系统命令,这里创建一个新的文件,成功则返回0 Out[24]: 0 In [26]: os.stat('test.py') # 查看文件状态 Out[26]: os.stat_result(st_mode=33188, st_ino=2252266, st_dev=16777223, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1549423963, st_mtime=1549423963, st_ctime=1549423963) In [27]: os.rename('test.py','new.py') # 对文件改名 In [28]: os.remove('new.py') # 删除一个文件
In [29]: import os In [30]: os.system('touch test.py') # 创建一个新文件用于操作 Out[30]: 0 In [31]: os.mkdir('test') # 创建一个文件夹用于操作 In [34]: abspath = os.path.abspath('test.py') # 返回文件的绝对路径 In [35]: abspath Out[35]: '/Users/minutesheep/test.py' In [37]: os.path.split(abspath) # 将一个文件的绝对路径分隔为元组形式,一个是目录,一个是文件名 Out[37]: ('/Users/minutesheep', 'test.py') In [38]: os.path.dirname(abspath) # 返回路径的上级目录 Out[38]: '/Users/minutesheep' In [39]: os.path.basename(abspath) # 返回文件名,如果路径以/结尾,则返回空 Out[39]: 'test.py' In [40]: os.path.exists(abspath) # 判断路径是否存在 Out[40]: True In [41]: os.path.isabs(abspath) # 判断路径是否为绝对路径 Out[41]: True In [42]: os.path.isfile(abspath) # 判断路径是否为文件 Out[42]: True In [43]: os.path.isdir('test') # 判断路径是否为文件夹 Out[43]: True
二、sys模块
想要完全了解它,请查看其官方文档:< a href="https://docs.python.org/3.5/library/sys.html">https://docs.python.org/3.5/library/sys.html
这里只记录一些常用方法:
In [1]: import sys # 导入sys模块 In [2]: sys.argv # 输出命令行参数列表,第一个元素为当前程序本身 Out[2]: ['/Users/minutesheep/.pyenv/versions/3.5.2/bin/ipython'] In [3]: sys.version # 输出Python版本 Out[3]: '3.5.2 (default, Feb 3 2019, 22:37:21) \n[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.4)]' In [4]: sys.path # 输出模块的搜索路径,这个是最常用的! In [5]: sys.platform # 返回操作系统平台名称 Out[5]: 'darwin'
三、项目目录树架构
在写一个项目时,不可能只有一个程序文件,往往含有许多个不同的程序文件,这些程序文件不能都放在同一个文件夹,需要对这些文件进行归类整理。通常一个项目有可执行文件、测试文件、源代码文件、配置文件、日志文件、读我文件,这些文件应当有详细的分类,建议大家整理成如下目录树结构:
# 以SpeakLanguage项目为例: SpeakLanguage # 项目名 ├── README # 读我文件 ├── bin # 执行目录 │ └── speak.py # 执行文件 ├── conf # 配置文件目录 │ ├── conf1.cfg # 配置文件1 │ └── conf2.cfg # 配置文件2 ├── log # 日志目录 │ └── log.log # 日志 ├── requirements.txt # 本项目需要的模块 └── speak_language # 源代码目录,通常与项目名相同 ├── chinese.py # 源代码1 ├── english.py # 源代码2 ├── main.py # 源代码入口 └── test # 测试目录,里面含有测试文件
1 # bin/speak.py 2 3 import os 4 import sys 5 6 BASE_DIR = os.path.dirname(os.path.dirname( 7 os.path.abspath(__file__))) # 获取项目目录 8 9 sys.path.append(BASE_DIR) # 将项目目录添加到模块的搜索列表里 10 11 if __name__ == '__main__': 12 from speak_language.main import run # 从源代码入口程序main.py中导入run方法 13 14 run() # 执行
1 # speak_language/chinese.py 2 3 def chinese(): 4 print('我是小绵羊')
1 # speak_language/english.py 2 3 def english(): 4 print('I am MinuteSheep')
# speak_language/main.py from speak_language import chinese from speak_language import english def run(): chinese.chinese() english.english()
1 # requirements.txt 2 3 将需要的安装的模块列在此文件中
# README 程序说明: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 项目环境介绍: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 需要的模块: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 项目目录树: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 作者:MinuteSheep 联系方式:xxxxxx
# 执行结果 我是小绵羊 I am MinuteSheep
我是MinuteSheep
联系方式:minutesheep@163.com
声明:原创作品,未经允许不得私自盗用、抄袭,侵犯作者署名权及著作权。如需引用请联系作者,在作者允许的情况下使用,并注明作者与出处,侵权必究!!!!!