【Python】 sys和os模块
sys
sys模块能使程序访问于python解释器联系紧密的变量和函数
● sys中的一些函数和变量
argv 命令行参数构成的列表
path 查找所有可用模块所在的目录名的列表
platform 查看当前操作平台如win32,linux2之类的平台标识符
stdin 标准输入流
stdout 标准输出流
stderr 标准错误流
//这三个流是类文件对象,默认关联的文件是键盘,屏幕和屏幕
modules 所有加载的模块,按模块类别分别"built_in":...,等 可用modules.keys()查看分类,import语句在import前都会检查这个字典看要加载的模块在不在里面
*关于stdin,stdout,stderr
他们本身有stdin.read和stdout.write&stderr.write来进行读写。//比如print语句总是自带换行,如果想不换行就可以sys.stdout.write("...")
因为stdout的输出对象是屏幕,所以当stdout要写东西时,内容是输出在屏幕上的。如果在程序中让stdout = open("PATH","w"),相当于把默认的stdout输出到屏幕という設定改成输出到一个特定的文件。
那么在此之后再来print "Hello",此时屏幕上已经看不到内容,而全部都在文件里了。
同理,可以用stderr来生成程序层面的错误日志。
☆ 可以看到要让stdout重定向会让原来关联的屏幕设备弄不回来了。所以在这么做之前,一定要将原来的屏幕设备对象备份起来:
- temp = stdout
- stdout = open("testfile","w")
- ##########一些操作后
- stdout = temp
像这样,重定向完了之后一定要把屏幕重新关联到stdout
exit 退出当前程序,并给出返回值
exitfunc 指出退出时调用的函数,让sys.exitfunc = 函数名 来指定
需要注意的是,sys中的变量大多与解释器和系统挂钩,所以对其进行分析或操作时千万记得要创建一个副本操作,否则可能影响其他东西
os
os模块主要负责程序查看一些操作系统的信息。它提供一些普遍的操作系统的功能而与具体是什么操作系统无关。
● 一些os中的变量
name 指出平台,若是windows系统则是nt,若是linux/unix系统是posix
sep 路径分隔符,如linux上是'/'而windows上是'\'
linesep 行终止符
● 一些os中的方法
os.getcwd() 获取当前工作目录
os.chdir(...) 改变工作目录
os.listdir(...) 获得指定目录下的所有文件和子目录组成的列表
os.rmdir(...) 删除(空)目录
os.makedirs(...) 会递归创建目录
os.remove(...) 删除一个文件
os.system(...) 执行shell命令,其返回值就是命令执行的返回值(0为执行成功等)
os.startfile(...) 打开某个程序,只有在windows下才可顺利执行
在中文系统中,涉及文件及目录的时候通常会含有中文,在os中对中文的处理默认是unicode方式而不是某种编码的str,所以程序碰到中文时也尽量用unicode的方式来处理吧。
● 除此之外,os还有个子模块path下,有很多跟路径以及文件名相关的内容,如:
os.path.split(...) 返回(目录路径,文件名) 相当于是把文件的完整的绝对路径拆分成了一个元组的两部分
os.path.isfile(...)/isdir(...) 判断是否是文件或目录并且存在
os.path.exists(...) 判断该路径是否存在
os.path.getsize(...) 返回某个文件大小,若传进目录作为参数则大小为0
os.path.splitext(...) 分离文件名和扩展名,即使文件有完整目录也把目录保留下来,比如splitext("D:\test.txt") ==> ("D:\test","txt")
os.path.join(path,name) 连接目录和文件名
os.basename(...) 传入一个绝对路径的话返回的是仅文件名的部分
os.dirname(...) 和上面相反,返回文件所在目录的部分(不包括中间那个分隔符的)
*可以说,除了少数几个像isfile,exists这样的方法外,其余os.path的方法都是只做了对路径处理的文字表面功夫,并不深究是否符合文件系统逻辑。
■ 一些积累
● os.walk(path)功能是遍历目录下所有内容,返回一个迭代器,其中包含了一些三元元组,每个元组的结构都是(dirpath,dirnames,filenames)
dirpath:某个目录节点的路径表示(包括了该目录本身在内所有子目录节点)
dirnames:该目录下所有子目录的列表
filenames:该目录下所有文件组成的列表
场景:比如说有个文件夹,要对其下以及其所有子目录下的所有文件做一个遍历,此时便可用walk,提取所有元组中的第三项,即每个目录节点下的文件的名字,以及第一项dirpath,将两者合并,便可得到每个文件的完整绝对路径了。
● os.path.expanduser(path)
可以将path中的"~"部分替换成当前用户的HOME文件夹,相当于是一个联系了环境变量的字符串替换工作
● 关于获取文件或目录的权限
最近老是遇到要获取文件或目录权限的需求,然而自己写一个吧也就是截取文件或者目录权限的表示字符串再来判断什么的感觉很低级。现在发现可以这么解决:
os里有一个os.stat("dir or file")的方法,返回一个stat对象,这个对象中就包含了这个文件或目录的很多信息,包括权限,所有者,大小,修改时间等等。可以说属性比较多比较万能的:
- import os
- stat = os.stat("testfile")
- print stat.st_mode #33188,看不懂是因为这串数字是10进制的,必须要转化成8进制的数
- print oct(stat.st_mode) #0100644,最后三位644说的就是他的权限啦
除了st_mode还有st_uid , st_gid , st_size , st_a/c/mtime(是时间戳) 等等属性可以拿来用!
● 查看某个挂载点下的硬盘信息(Linux)
os.statvfs('/'),返回一个statvfs_result对象。调用其中的信息可以给出一些关于硬盘的完整信息。
● 补充一下摘录自网上的一些os模块的方法(http://www.jb51.net/article/50070.htm)有重复的也不要吐槽。。:
- os.sep 可以取代操作系统特定的路径分隔符。windows下为 '\\'
- os.name 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix'
- os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径
- os.getenv() 获取一个环境变量,如果没有返回none
- os.putenv(key, value) 设置一个环境变量值
- os.listdir(path) 返回指定目录下的所有文件和目录名
- os.remove(path) 函数用来删除一个文件
- os.system(command) 函数用来运行shell命令
- os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用 '\r\n',Linux使用 '\n' 而Mac使用 '\r'
- os.path.split(path) 函数返回一个路径的目录名和文件名
- os.path.isfile() 和os.path.isdir()函数分别检验给出的路径是一个文件还是目录
- os.path.exists() 函数用来检验给出的路径是否真地存在
- os.curdir 返回当前目录 ('.')
- os.mkdir(path) 创建一个目录
- os.makedirs(path) 递归的创建目录
- os.chdir(dirname) 改变工作目录到dirname
- os.path.getsize(name) 获得文件大小,如果name是目录返回0L
- os.path.abspath(name) 获得绝对路径
- os.path.normpath(path) 规范path字符串形式
- os.path.splitext() 分离文件名与扩展名
- os.path.join(path,name) 连接目录与文件名或目录
- os.path.basename(path) 返回文件名
- os.path.dirname(path) 返回文件路径
- os.walk(top,topdown=True,onerror=None) 遍历迭代目录
- os.rename(src, dst) 重命名file或者directory src到dst 如果dst是一个存在的directory, 将抛出OSError. 在Unix, 如果dst在存且是一个file, 如果用户有权限的话,它将被安静的替换. 操作将会失败在某些Unix 中如果src和dst在不同的文件系统中. 如果成功, 这命名操作将会是一个原子操作 (这是POSIX 需要). 在 Windows上, 如果dst已经存在, 将抛出OSError,即使它是一个文件. 在unix,Windows中有效。
- os.renames(old, new) 递归重命名文件夹或者文件。像rename()
【Python】 sys和os模块的更多相关文章
- python中sys和os模块的使用
在python中,sys,os模块是非常强大的,提供了许多对文件夹.文件和路径的操作方法 sys模块 sys.argv #命令行执行脚本,其实它就是一个列表 ,sys.argv[0] 是程序自身路 ...
- 善于利用python中的os模块
作为一个程序猿,平时善于利用python中的os模块进行路径等操作,会省去很多麻烦,下面总结一下我平时经常用到的方法: import os os.getcwd() # 获取当前文件所在的目录 os.p ...
- Python基础入门-os模块
今天我们来介绍一下os模块中常用的一些方法,当然python中的os模块中提供的使用方法有很多,但是这里面小编会列举出来一些和实际工作中应用的相关的方法,而且会有一些实际的例子方便大家对os模块理解. ...
- Python中使用os模块执行远程命令
1. 使用os模块远程执行命令 服务端代码 1 import socket 2 import os 3 4 sh_server = socket.socket() #创建一个socket对象 5 sh ...
- Python内置OS模块用法详解
大家好,从今天起早起Python将持续更新由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示.刚入门的读者千万不要错过! 很多人学习python,不知 ...
- 19 python初学(os 模块,sys 模块,hashlib 模块)
os 模块: # _author: lily # _date: 2019/1/13 import os print(os.getcwd()) # 得到当前的工作目录 # print(os.chdir( ...
- python note 17 random、time、sys、os模块
1.random模块(取随机数模块) # 取随机小数 : 数学计算 import random print(random.random())# 取0-1之间的小数 print(random.unifo ...
- python的sys和os模块
一.sys sys.argv:实现从程序外部向程序传递参数. 其中sys.argv[0]为脚本的名称,所以要判断是否有参数传入可以:if len(sys.argv) > 1. sys.exi ...
- python笔记6 模块与包 程序开发规范 包 re sys time os模块
模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...
随机推荐
- ORACLE中修改表的Schema的总结
前阵子遇到一个案例,需要将数据库中的几个表从USER A 移动到USER B下面,在ORACLE中,这个叫做更改表的所有者或者修改表的Schema.其实遇到这种案例,有好几种解决方法.下面我们通过实验 ...
- 深度拾遗(06) - 1X1卷积/global average pooling
什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均. 只不过这个组合系数恰好可以看成是一个11的卷积.这种表示的好处是,完全可以回到模型中其 ...
- 织梦dedecms列表序号从0到1开始的办法 autoindex,itemindex标签
自增1 arclist 标签下使用 [field:global.autoindex/] 默认从1开始 channel 标签下使用 [field:global.au ...
- 父页面(JSP页面)传参数到子页面(JSP页面)
父页面(JSP页面)传参数到子页面(JSP页面) 1.父页面传参数到子页面 //JavaScript代码 $.ajax({ type:"POST", uri:"../st ...
- C#中各种计时器 Stopwatch、TimeSpan
1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 St ...
- freemarker写select组件报错总结(二)
1.错误描述 六月 25, 2014 11:32:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...
- Oracle连接出错(一)
1.错误描述 java.sql.SQLException: ORA-0064:error occurred at recursive SQL level 1. ORA-06153:unable to ...
- No bean named 'sessionFactory' is defined
1.错误描述 严重:Servlet service() for servlet default threw exception . org.springframework.beans.factory. ...
- Django学习-13-simple_tag使用
一些HTML方法 {{item.event_start | date:"Y-m-d H:i:s"}} {{bi ...
- 过滤文件代码 python
import os import cv2 import shutil # store all file in directory global totalFileList totalFileList ...