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 
  • 相关阅读:
    UIKit, AppKit, 以及其他API在多线程当中的使用注意事项
    BOZJ-2590 优惠券
    P3620 [APIO/CTSC 2007] 数据备份
    矩阵乘法与快速幂
    CodeForces
    AtCoder
    CodeForces
    考试成绩和学号的(结构体)排序
    CodeForces
    Atcoder Beginner Contest 092 —— C题
  • 原文地址:https://www.cnblogs.com/minutesheep/p/10353635.html
Copyright © 2011-2022 走看看