最近因为要使用到os模块,之前其实只是了解了os模块的几个常见的函数,并没有想过深入去了解更多,现在正好工作需要,索性抽取一点时间来好好整理一下,以后需要的是直接翻出来就可以了,借鉴了网上的一些博客,这里就是是对这些文章进行以下简单的综合,为的是更加全面一些,备忘,在文章底部给出链接:

os.sep     可以取代操作系统特定的路径分割符
os.linesep  字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n' 而Mac使用'\r'。
os.name         字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
os.getcwd()   函数得到当前工作目录,
os.getenv()和os.putenv()   函数分别用来读取和设置环境变量。
os.listdir(dirname): 列出dirname下的目录和文件
os.remove()  函数用来删除一个文件。
os.curdir:   返回但前目录('.')
os.chdir(dirname): 改变工作目录到dirname
getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数
getmtime(path):文件或文件夹的最后修改时间
getctime(path):文件或文件夹的创建时间
os.stat(file):获得文件属性
os.chmod(file):修改文件权限和时间戳
os.mkdir(name):创建目录
os.rmdir(name):删除目录
os.removedirs(r“c:\python”):删除多个目录
os.system():运行shell命令
os.exit():终止当前进程
os.linesep:给出当前平台的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
os.path.split():返回一个路径的目录名和文件名
os.path.isfile()和os.path.isdir()分别检验给出的路径是一个目录还是文件
os.path.existe():检验给出的路径是否真的存在
os.listdir(dirname):列出dirname下的目录和文件
os.getcwd():获得当前工作目录
os.curdir:返回当前目录('.')
os.chdir(dirname):改变工作目录到dirname
os.path.isdir(name):判断name是不是目录,不是目录就返回false
os.path.isfile(name):判断name这个文件是否存在,不存在返回false
os.path.exists(name):判断是否存在文件或目录name
os.path.getsize(name):或得文件大小,如果name是目录返回0L
os.path.abspath(name):获得绝对路径
os.path.isabs():判断是否为绝对路径
os.path.normpath(path):规范path字符串形式
os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext():分离文件名和扩展名
os.path.join(path,name):连接目录与文件名或目录
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路径
os.path模块:
os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录,返回bool值
os.path.exists()函数用来检验给出的路径是否真地存在 返回bool
os.path.getsize(name):获得文件大小,如果name是目录返回0L 返回long 单位是字节
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式, 结果一般情况下把/变为//,
os.path.split(name):将name分割成路径名和文件名,结果为(路径名,文件名.文件扩展名)(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext(filename):分离文件名与扩展名 结果为(filename,扩展名) 如果参数为一个路径 则返回(路径,'')
os.path.join(path,name): 连接目录与文件名或目录 结果为path/name
os.path.basename(path):返回文件名 实际为把path的最后一个"/"分割,返回后者。不管参数是一个路径还是文件 与os.path.split(name)相同 不同之处后者返回两个值得元组

os.path.dirname(path): 返回文件路径 实际为把path的最后一个"/"分割,返回前者。不管参数是一个路径还是文件
os.system()函数用来运行shell命令
-------------------------------------------------------------------------------------------------------------------
文件操作
os.mknod("text.txt"):创建空文件
fp = open("text.txt",w):直接打开一个文件,如果文件不存在就创建文件

关于open的模式

w 写方式
a 追加模式打开(从EOF开始,必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开
a+ 以读写模式打开
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )

关于文件的函数

fp.read([size])                    
size为读取的长度,以byte为单位

fp.readline([size])                
读一行,如果定义了size,有可能返回的只是一行的一部分

fp.readlines([size])               
把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

fp.write(str)                      
把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq)                  
把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

fp.close()                        
关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError

fp.flush()                                      
把缓冲区的内容写入硬盘

fp.fileno()                                      
返回一个长整型的”文件标签“

fp.isatty()                                      
文件是否是一个终端设备文件(unix系统中的)

fp.tell()                                         
返回文件操作标记的当前位置,以文件的开头为原点

fp.next()                                       
返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

fp.seek(offset[,whence])              
将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

fp.truncate([size])                       
把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

目录操作
os.mkdir("file")                   
创建目录

复制文件:

shutil.copyfile("oldfile","newfile")       
oldfile和newfile都只能是文件

shutil.copy("oldfile","newfile")            
oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

shutil.copytree("olddir","newdir")        
复制文件夹.olddir和newdir都只能是目录,且newdir必须不存在

os.rename("oldname","newname")       
重命名文件(目录).文件或目录都是使用这条命令

shutil.move("oldpos","newpos")   
移动文件(目录)

os.rmdir("dir")
只能删除空目录

shutil.rmtree("dir")    
空目录、有内容的目录都可以删

os.chdir("path")   
转换目录,换路径

代码演示
#!/usr/bin/env python

import os

print os.getcwd()                               #获取当前路径

print os.listdir('/mnt')                        #列出/mnt下面的所有目录和文件

print os.mkdir('lala')                          #创建目录lala和haha
print os.mkdir('haha')

print os.rmdir('haha')                          #删除haha

print os.rename('example.txt','back.txt')       #修改文件名
运行:

root@ruanyang-HP-ProDesk-680-G2-MT:/mnt/python# python os.py 
/mnt/python
['proc', 'perl_bash', 'docker', 'warn', 'blog', 'python', 'hostname', 'test', 'tags', 'perl_DB', 'shell', 'perl_test', '.vimrc~', 'club.yml', 'test.c', '.vimrc']
None
None
None
None
root@ruanyang-HP-ProDesk-680-G2-MT:/mnt/python# ls
back.txt  exit.py  lala  modules.py  os_file.py  os.py  sys.py
-------------------------------------------------------------------------------------------------------------------
上面仅是常见的,一下列出所有的:
os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果。
os.name:返回当前操作系统名称('posix', 'nt', 'os2', 'mac', 'ce' or 'riscos')
os中定义了一组文件、路径在不同操作系统中的表现形式参数,如
os.sep(文件夹分隔符,windows中是 \ )
os.extsep(扩展名分隔符,windows中是 . )
os.pathsep(目录分隔符,windows中是 ; )
os.linesep(换行分隔符,windows中是 \r\n )
os中有大量文件、路径操作的相关函数,如:
listdir(path):列举目录下的所有文件
makedir(path):创建文件夹,注:创建已存在的文件夹将异常
makedirs(path):递归式的创建文件夹,注:创建已存在的文件夹将异常
remove(filename):删除一个文件
rmdir(path):删除一个文件夹,注:删除非空的文件夹将异常
removedirs(path):递归的删除文件夹,直到有一级的文件夹非空,注:文件夹路径不能以'\'结束
rename(src,dst):给文件或文件夹改名(可以改路径,但是不能覆盖目标文件)
renames(src,dst):递归式的给文件或文件名改名
walk(path):列举path下的所有文件、文件夹
os中与进程相关的操作,如:
execl(path):运行一个程序来替代当前进程,会阻塞式运行
_exit(n):退出程序
startfile(filename):用与文件关联的程序运行,关联程序打开后,立即返回
system(cmd):运行一个程序或命令,会立即返回,并在cmd执行完成后,会返回cmd退出代码
os.path:在不同的操作系统中调用不同的模块,是一个可import的模块,这个模块中提供很多有用的操作:
abspath(path):返回path的绝对路径,若path已经是绝对路径了,则保持。
basename(path):返回path中的文件名。
commonprefix(list):返回list中的统一前缀,用于获得一组字符串的左起相同的内容
dirname(path):返回path中的文件夹部分,结果不包含'\'
exists(path):文件或文件夹是否存在
getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数
getmtime(path):文件或文件夹的最后修改时间
getctime(path):文件或文件夹的创建时间
getsize(path):文件或文件夹的大小,若是文件夹返回0
isabs(path):返回是否是绝对路径
isfile(path):返回是否是文件路径
isdir(path):返回是否是文件夹路径
islink(path):返回是否是快捷方式
join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除
normcase(path):转换路径中的间隔符
normpath(path):转换路径为系统可识别的路径
realpath(path):转换路径为绝对路径
split(path):将路径分解为(文件夹,文件名)
splitext(path):将路径分解为(其余部分,.扩展名),若文件名中没有扩展名,扩展名部分为空字符串
在操作与系统不支持的对象时,抛出OSError异常。
---------------------------------------------------------------------------------------------------------------------
二、Sys
sys.argv: 实现从程序外部向程序传递参数。
sys.exit([arg]): 程序中间的退出,arg=0为正常退出。
sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.
sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
sys.platform: 获取当前系统平台。
sys.stdin,sys.stdout,sys.stderr stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
 
三、Paltform
platform.system() 获取操作系统类型,windows、linux等
platform.platform() 获取操作系统,Darwin-9.8.0-i386-32bit
platform.version() 获取系统版本信息 6.2.0
platform.mac_ver()
platform.win32_ver() ('post2008Server', '6.2.9200', '', u'Multiprocessor Free')
sys.platform各平台的的返回值
 平台                                    值
Linux (2.x and 3.x)           'linux2'   
Windows                          'win32'   
Windows/Cygwin             'cygwin'   
Mac OS X                        'darwin'   
OS/2                                  'os2'   
OS/2 EMX                       'os2emx'   
RiscOS                             'riscos'   
AtheOS                            'atheos'
--------------------------------------------------------------------------------------------------------------------
Linux几个进程相关的系统函数:
1. os.system(command)
# 在一个程序内部启动另一个程序,从而创建一个新进程
# os.system 在一个shell中执行command命令,这是一个对C函数system()的python实现,具有相同的限制条件。在Unix系统中,返回值是命令执行后的退出状态值。由于POSIX没有为C函数system()的返回值指定明确的含义,所以os.system()的返回值依# 赖具体的系统。在Windowns中,返回值由系统环境变量决定: COMSPEC, 此环境变量依据不同系统版本不同
# 因为os.system的局限性,官方文档建议用 subprocess模块的功能来代替此函数

2. os.exec系列
os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)
# 这些函数都执行一个新的程序,然后用新的程序替换当前子进程的进程空间,而该子进程从新程序的main函数开始执行。在Unix下,该新程序的进程id是原来被替换的子进程的进程id。原来的程序不再运行。在原来子进程中打开的所有描述符默认都是可用的,不会被关闭。
# execv*系列的函数表示其接受的参数是以一个list或者是一个tuple表示的参数表
# execl*系列的函数表示其接受的参数是一个个独立的参数传递进去的。
# exec*p*系列函数表示在执行参数传递过去的命令时使用PATH环境变量来查找命令
# exec*e系列函数表示在执行命令的时候读取该参数指定的环境变量作为默认的环境配置,最后的env参数必须是一个mapping对象,可以是一个dict类型的对象。

3. os.fork (只在Unix有效)
# 要想让进程同时执行多个函数,可以使用线程或者从原程序中创建一个完全分离的进程。可以通过fork创建一个新进程。这个调用复制当前进程,在系统的进程表上创建一个新表项,新表项中的许多属性与当前进程相同。但新进程有自己的数据空间、环境和文件描述符
# os.fork出一个子进程,在子进程中返回0,在父进程中返回子进程ID,如果发生错误,则抛出OSError异常
# 注意:在一些平台下如FreeBSD,Cygwin和OS/2 EMX系统中使用该函数会有问题。

4. os.wait (只在Unix有效)
# 当fork启动一个子进程时,子进程有了自己的生命周期并独立运行,有时候希望知道一个子进程何时结束,这时可以通过wait函数让父进程等待子进程运行结束
# os.wait 等待任何一个子进程结束,返回一个tuple,包括子进程的进程ID和退出状态信息:一个16位的数字,低8位是杀死该子进程的信号编号,而高8位是退出状态(如果信号编号是0),其中低8位的最高位如果被置位,则表示产生了一个core文件。
# 相关的的有os.waitpid(pid, options)

#!/usr/bin/python
#coding=utf-8
import os

def child():
    print('hello from child', os.getpid(), os.getppid())    #前者获取进程id, 或者获取父进程id
    os._exit(0)     # 退出进程, 通常只用在fork() 产生的子进程中

def parent():
    pid = os.fork()   # 返回的pid在父进程中为子进程PID,在资进程中为0, 所以下面根据pid判断是哪个进程
    if pid == 0:
        child()
        print 'fork child process error!'    #如果打印该字符串,说明调用child()出错
    else:
        print('hello from parent', os.getpid(), pid)

parent()
我电脑上运行结果如下:

-> python test.py

('hello from parent', 1952, 1953)
('hello from child', 1953, 1952)
os.exec 和 os.system
os.execlp的测试代码如下:

#!/usr/bin/python
#coding=utf-8
import os

def main():
    print "Running ps with execlp"
    os.execlp("ps", 'ps', 'ax')
    print "Done."

main()
运行结果:

-> python test4.py
Running ps with execlp
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss     0:12.43 /sbin/launchd
   42   ??  Ss     0:03.05 /usr/libexec/UserEventAgent (System)
   43   ??  Us     0:05.24 /usr/sbin/syslogd
...
  481 s000  S+     0:00.14 -zsh
 1803 s001  Ss+    0:00.49 /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versio
 1806 s002  Ss     0:00.10 /bin/zsh -i
 2070 s002  R+     0:00.02 ps ax
os.system的测试代码如下:

#!/usr/bin/python
#coding=utf-8
import os

def main():
    print "Running ps with execlp"
    os.system("ps ax")
    print "Done."

main()
运行结果如下:

-> python test4.py
Running ps with execlp
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss     0:12.71 /sbin/launchd
   42   ??  Ss     0:03.11 /usr/libexec/UserEventAgent (System)
...
  481 s000  S+     0:00.14 -zsh
 1803 s001  Ss+    0:00.50 /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versio
 1806 s002  Ss     0:00.10 /bin/zsh -i
 2113 s002  S+     0:00.02 /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versio
 2114 s002  R+     0:00.00 ps ax
Done.
以上两个例子对比可以看到 exec系列 的调用使得原进程接下的代码都不会运行。

os.wait
#! /usr/bin/python
#coding=utf-8

import os
import sys

def child_process():
    '''child process'''
    print 'child process is running'
    sys.exit(0)                 # 常用的退出进程

def parent_process():
    '''parent process'''
    print 'parent process is running'
    print 'waiting for child process'
    exit_stat = os.wait()     # 返回值是一个pid 和退出状态的元组
    print "waited child process's PID = %d" % (exit_stat[0])
    sys.exit(0)

def main():
    '''main function'''
    try:
        pid = os.fork()
        if pid > 0:
            '''parent process'''
            parent_process()
        else:
            child_process()
    except OSError, e:
        print os.strerror(e.errno)

main()
运行结果:

-> python test4.py
parent process is running
waiting for child process
child process is running
waited child process's PID = 2152

http://www.pythontab.com/html/2013/pythonjichu_0514/397.html

http://www.cnblogs.com/nisen/p/6060355.html

http://www.cnblogs.com/cherishry/p/5725977.html

http://www.cnblogs.com/BeginMan/p/3327291.html

python os模块大全相关推荐

  1. Python 常用模块大全

    Python 常用模块大全(整理) OS 模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在 ...

  2. 转载: Python os 模块的功能以及子函数介绍

    原文链接: python之os模块 - 程序生(Codey) - 博客园 https://www.cnblogs.com/cxscode/p/8085326.html 一.Python OS模块介绍 ...

  3. python系统-Python OS模块常用功能 中文图文详解

    一.Python OS模块介绍 OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. 可以查看OS模块的帮助文档: >>> i ...

  4. Python学习笔记四(Python OS模块)

    Python os模块提供了一个统一的操作系统接口函数,通过python os模块可以实现对系统本身的命令,文件,目录进行操作,官方参考文档( http://docs.python.org/libra ...

  5. python os模块下载_Python OS模块目录文件处理

    Python编程语言优势特点比较突出,在Python语言中,有一种标准模块叫OS模块,Python OS模块包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块尤为重要,它允许一个程 ...

  6. python os模块 常用命令

    os 模块用法示例 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()--判断现在正在实用 ...

  7. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

  8. Python os模块文件操作(一)

    Python os模块文件操作(一) 一.文件描述符 在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符. 操作系统为了高效管理已经被打开的文件, ...

  9. Python os模块 -Python系统编程中的操作模块

    Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...

  10. python os模块打开文件_Python 文件操作之OS模块

    with open('filepath') as rename: for line in rename: ... with 命令下 不用使用close()函数关闭文件,打开的文件在with 代码块下有 ...

最新文章

  1. 算法(1)斐波那契数列
  2. 【leetcode】923. 3Sum With Multiplicity
  3. linux 下ab压力测试
  4. 慈溪微生活图标_日常生活中的图标
  5. vue强制更新$forceUpdate()
  6. 弹性布局----Flex
  7. Golang——切片使用大全(创建、初始化、遍历、截取、修改、添加、切片的copy、切片作为函数参数、切片求和、切片求最大值)
  8. 新手赛(2) 第五题 因素和问题
  9. 127.Word Ladder
  10. 流水灯verilog实验原理_流水灯实验
  11. 客户端渲染(CSR)
  12. matlab学习笔记杂项一
  13. 服务器网卡有什么作用,服务器网卡的作用
  14. win10文件后缀名怎么显示_显示文件类型扩展名图文教程,win电脑系统文件修改后缀名方法...
  15. 调戏木马病毒的正确姿势——上
  16. ESXi 安装 TrueNas
  17. Tecplot 360 安装后弹出“Is your Tecplot 360 EX liense valid?”解决方法
  18. python 自动化办公(一)word制作
  19. 你会他乡遇故知?-让自己慢下来(51)
  20. 各品牌电脑进入BIOS的按键

热门文章

  1. 基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD
  2. 渗透测试为什么要重基础、重实践?
  3. 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
  4. WinXP中自带的netsh命令自动切换IP(zz)
  5. 基于spring reactor3构建的即时通讯api。
  6. 广播接收者的特点和版本差异
  7. 关于MPMoviePlayerController类播放视频时,外放没有声音的问题(ios)
  8. 后端分布式系列:分布式存储-MySQL 数据库事务与复制
  9. 手把手教你做关键词匹配项目(搜索引擎)---- 第十一天
  10. 在 Emacs 里修改现有文件的编码格式(转载)