zoukankan      html  css  js  c++  java
  • os和sys模块

    os模块

    官方解释:

    os: 可以使用操作系统函数的方法

    sys: 可以访问 由解释器使用或维护的变量 和 与解释器进行交互的函数。

    os常用的方法:

    os.remove(‘path/filename’)  # 删除文件
    os.rename(oldname, newname) # 重命名文件
    os.walk() # 生成目录树下的所有文件名
    os.chdir('dirname') # 改变目录
    os.mkdir/makedirs('dirname')  # 创建目录/多层目录
    os.rmdir/removedirs('dirname') # 删除目录/多层目录
    os.listdir('dirname') # 列出指定目录的文件
    os.getcwd() # 取得当前工作目录
    os.chmod() # 改变目录权限
    os.path.basename(‘path/filename’) # 去掉目录路径,返回文件名
    os.path.dirname(‘path/filename’) # 去掉文件名,返回目录路径
    os.path.join(path1[,path2[,...]]) # 将分离的各部分组合成一个路径名
    os.path.split('path') # 返回( dirname(), basename()) 元组
    os.path.splitext() # 返回 (filename, extension) 元组
    os.path.getatimectimemtime # 分别返回最近访问、创建、修改时间
    os.path.getsize() # 返回文件大小
    os.path.exists() # 是否存在
    os.path.isabs() # 是否为绝对路径
    os.path.isdir() # 是否为目录
    os.path.isfile() # 是否为文件

    示例:给定一个文件夹,找出文佳夹下所有的文件的路径

    import os
    
    # 方法一:(面试要求不使用os.walk)
    def print_directory_contents(sPath):
        for sChild in os.listdir(sPath):
            sChildPath = os.path.join(sPath, sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
    
    # 方法二:(使用os.walk)
    def print_directory_contents(sPath):
        for root, _, filenames in os.walk(sPath):
            for filename in filenames:
                print(os.path.abspath(os.path.join(root, filename)))
    
    print_directory_contents('D:Demo')

    sys模块

    sys常用的方法:

    sys.argv # 命令行参数List,第一个元素是程序本身路径
    sys.modules.keys() # 返回所有已经导入的模块列表
    sys.exc_info() # 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback # 当前处理的异常详细信息
    sys.exit(n) # 退出程序,正常退出时exit(0)
    sys.hexversion # 获取Python解释程序的版本值,16进制格式如:0x020403F0
    sys.version # 获取Python解释程序的版本信息
    sys.maxint # 最大的Int值
    sys.maxunicode # 最大的Unicode值
    sys.modules # 返回系统导入的模块字段,key是模块名,value是模块
    sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform # 返回操作系统平台名称
    sys.stdout # 标准输出
    sys.stdin # 标准输入
    sys.stderr # 错误输出
    sys.exc_clear() # 用来清除当前线程所出现的当前的或最近的错误信息
    sys.exec_prefix # 返回平台独立的python文件安装的位置
    sys.byteorder # 本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
    sys.copyright # 记录python版权相关的东西
    sys.api_version # 解释器的C的API版本
    sys.stdin,sys.stdout,sys.stderr

    stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足要求, 它们就是所需要的;
    你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们

    import sys
    
    sys.stdout.write('HelloWorld!')
    
    print('Please enter yourname:')
    name = sys.stdin.readline()[:-1]
    print('Hi, %s!' % name)

    常用print和raw_input来进行输入和打印,那么print 和 raw_input是如何与标准输入/输出流建立关系:其实Python程序的标准输入/输出/出错流定义在sys模块中,分别 为: sys.stdin,sys.stdout, sys.stderr
    下列的程序也可以用来输入和输出是一样的,在Python运行环境中输入以下代码:

    import sys
    
    for f in (sys.stdin, sys.stdout, sys.stderr):
        print(f)
    
    # 输出为:
    # <_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>
    # <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
    # <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>

    由此可以看出stdin, stdout, stderr在Python中无非都是文件属性的对象,他们在Python启动时自动与Shell 环境中的标准输入,输出,出错关联。
    而Python程序的在Shell中的I/O重定向与本文开始时举的DOS命令的重定向完全相同,其实这种重定向是由Shell来提供的,与Python 本身并无关系。那么我们可以在Python程序内部将stdin,stdout,stderr读写操作重定向到一个内部对象.
    Python提供了一个StringIO模块来完成这个设想,比如:

    from io import StringIO
    import sys
    
    buff = StringIO()
    
    temp = sys.stdout  # 保存标准I/O流
    sys.stdout = buff  # 将标准I/O流重定向到buff对象
    print(42, 'hello', 0.001)   # 不打印
    
    sys.stdout = temp  # 恢复标准I/O流
    print(buff.getvalue())  # 42 hello 0.001

    总结:
      os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;
      sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/9295452.html
Copyright © 2011-2022 走看看