zoukankan      html  css  js  c++  java
  • #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]: '
    '
    
    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) 
    [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 
  • 相关阅读:
    AcWing 1135. 新年好 图论 枚举
    uva 10196 将军 模拟
    LeetCode 120. 三角形最小路径和 dp
    LeetCode 350. 两个数组的交集 II 哈希
    LeetCode 174. 地下城游戏 dp
    LeetCode 面试题 16.11.. 跳水板 模拟
    LeetCode 112. 路径总和 递归 树的遍历
    AcWing 1129. 热浪 spfa
    Thymeleaf Javascript 取值
    Thymeleaf Javascript 取值
  • 原文地址:https://www.cnblogs.com/minutesheep/p/10353635.html
Copyright © 2011-2022 走看看