python系统模块sys、os及应用

http://blog.csdn.net/pipisorry/article/details/42167683

python文件、目录及路径操作

Python的系统模块

包括sys, os, glob, socket, threading, _thread, queue, time, timeit, subprocess, multiprocessing, signal, select, shutil, tempfile等。

大多数系统级接口集中在:sys和os两个模块。
sys模块包含:
    平台与版本的信息,如sys.platform, sys.maxsize, sys.version
    模块搜索路径sys.path
    模块表sys.modules,这是一个包含python程序中import进来的模块的name:module信息的字典
    异常信息,如sys.exc_info()
    命令行参数sys.argv
    标准流,如sys.stdin, sys.stdout, sys.stderr
    程序退出调用sys.exit
os模块包含
    Tasks    Tools
    Shell variables    os.environ
    Running programs    os.system, os.popen, os.execv, os.spawnv
    Spawning processes    os.fork, os.pipe, os.waitpid, os.kill
    Descriptor files, locks    os.open, os.read, os.write
    File processing    os.remove, os.rename, os.mkfifo, os.mkdir, os.rmdir
    Administrative tools    os.getcwd, os.chdir, os.chmod, os.getpid, os.listdir, os.access
    Portability tools    os.sep, os.pathsep, os.curdir, os.path.split, os.path.join
    Pathname tools    os.path.exists('path'), os.path.isdir('path'), os.path.getsize('path')


os模块

模块包含普遍的操作系统功能。利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符。

os模块常用的方法

1.os.sep                    可以取代操作系统特定的路径分割符
2.os.name                 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
3.os.getcwd()            函数得到当前工作目录,即当前Python脚本工作的目录路径
4.os.curdir                返回但前目录('.')
5.os.chdir(dirname)  改变工作目录到dirname4.os.getenv()             用来读取环境变量
6.os.putenv()             用来设置环境变量
7.os.listdir()               返回指定目录下的所有文件和目录名

Note:listdir会将保护的操作系统文件list出来,如windows下的desktop.ini文件

8.os.remove()             函数用来删除一个文件
9.os.system()             函数用来运行shell命令 [python中调用命令行命令]
10.os.linesep               字符串给出当前平台使用的行终止符。例如,Windows使用'/r/n',Linux使用'/n'而Mac使用'/r'。

11. 判断并修改文件读写权限

     try :
         if not os.access(src, os.W_OK):
             os.chmod(src, 0664 )
     except :
         print 'Error: you can not chang %s\'s mode.' % src

12.os.walk

os.walk是一个generator函数。每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

举例如下:

>>> x=os.walk('/home/tiny/workspace/py')
>>> x
<generator object walk at 0x8ef652c>
>>>for i in x:
... i
...
('/home/tiny/workspace/py', ['2', '1'], ['.allfile.py.swp', 'allfile.py', 'list_get.py', 'test.py', 'tags', 'log.txt'])
('/home/tiny/workspace/py/2', [], ['fib.py', 'djcoding.py', 'drectory_travel.py', 'foo.py'])
('/home/tiny/workspace/py/1', [], ['timetest2.py', 'timetest.py'])
13.os.path
os.path.realpath 获取文件绝对路径
realpath = os.path.realpath(filename)
print realpath
 
# output
# C:\xxx\pyfunc\test.txt
[ Python文件输入输出]

皮皮blog



sys模块

sys模块可以参看python文档 http://docs.python.org/library/sys.html。

常用的函数

sys.argv: 实现从程序外部向程序传递参数。

  
  
  
  
  1. import sys  
  2. print sys.argv[0]  
  3. print sys.argv[1]  
  4. print sys.argv[2]
  
  
  
  
  1. >>>python print.py arg1 arg2  

Note:

1. 脚本的名称总是sys.argv列表的第一个参数。所以,在这里,print.py是sys.argv[0]arg1sys.argv[1]

2. 一般要加入if len(sys.argv) > 1:来判断是否有参数传入

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:包含输入模块的目录名列表。sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。

sys.platform: 获取当前系统平台。

皮皮blog



系统模块的应用

获得Python脚本所在目录的位置

1.以前的方法
如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。

如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事,因为Python会自动把sys.argv[0]加入sys.path。
具体来说,如果你在C:\test目录下执行python getpath\getpath.py,那么os.getcwd()会输出“C:\test”,sys.path[0]会输出“C:\test\getpath”。

更特别地,如果你用py2exe模块把Python脚本编译为可执行文件,那么sys.path[0]的输出还会变化
如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:\test\getpath\libarary.zip”;
如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:\test\getpath\getpath.exe”。

2.正确的方法

但以上这些其实都不是脚本文件所在目录的位置。
C:\test

----sub/

    ----sub_path.py

----getpath.py

getpath.py调用sub_path.py;我们在C:\test下执行getpath.py。

如果我们在sub_path.py里面使用sys.path[0],那么其实得到的是getpath.py所在的目录路径“C:\test”,因为Python虚拟机是从getpath.py开始执行的。

如果想得到sub_path.py的路径,那么得这样:

1. os.path.split(os.path.realpath(__file__))[0],其中__file__虽然是所在.py文件的完整路径,但是这个变量有时候返回相对路径,有时候返回绝对路径,因此还要用os.path.realpath()函数来处理一下。os.path.realpath(__file__)输出是“C:\test\sub\sub_path.py”,而os.path.split(os.path.realpath(__file__))[0]输出才是“C:\test\sub”。

2. 神奇的 Python 内部变量 __file__ ,该变量被自动设置为代码所在的 Python 模块文件名。 `` os.path.dirname(__file__)`` 将会获取自身所在的文件。如果在windows下,它会智能地选择正确的后向斜杠”“进行连接,而不是前向斜杠”/”。

3.实例说明
os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:
假设目录结构是:
 C:\test
----getpath
      ----path.py
      ---- sub
            ----sub_path.py

然后我们在C:\test下面执行python getpath/path.py,这时sub_path.py里面与各种用法对应的值其实是:
    os.getcwd() “C:\test”,取的是起始执行目录
    sys.path[0]或sys.argv[0] “C:\test\getpath”,取的是被初始执行的脚本的所在目录
    os.path.split(os.path.realpath(__file__))[0] “C:\test\getpath\sub”,取的是__file__所在文件sub_path.py的所在目录 

Note:文件执行路径、目录pathname = os.path.dirname(sys.executable)

[python文件、目录及路径操作-获取当前python文件的路径]

[如何获得Python脚本所在目录的位置]

[在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和file]

Python 搜索路径

使用 import 语句时,Python 所查找的系统目录清单。

举例来说,假定你将 Python 路径设置为 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果执行代码fromfooimportbar ,Python 将会首先在当前目录查找foo.py 模块( Python 路径第一项的空字符串表示当前目录)。 如果文件不存在,Python将查找/usr/lib/python2.4/site-packages/foo.py 文件。

如果你想看Python搜索路径的值,运行Python交互解释器,然后输入:

>>> import sys
>>> print sys.path

通常,你不必关心 Python 搜索路径的设置。 Python 和 Django 会在后台自动帮你处理好。

python代码暂停执行的几种方法

 1.time.sleep(secs)
    (程序真正暂停的时间可能长于请求的时间也可能短于暂停的时间)
Suspend execution for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep time. The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine. Also, the suspension time may be longer than requested by an arbitrary amount because of the scheduling of other activity in the system.
2. raw_input( )
     通过等待输入来让程序暂停
3. os.system("pause")
     通过执行操作系统的命令来让程序暂停,该函数是通过实现标准C函数system( )来实现的。
4.subprocess.call
     Python2.4新加入了subprocess模块,而且官方建议使用该模块替换os.system所以,也可以这样写:subprocess.call("pause",shell=True)

python终止程序运行

让python程序自动退出:exit()

程序陷入死循环,强制结束:Ctrl + C

python批量重命名文件

filedir = r'E:\mine\python_workspace\LDA\input\100Reviews_origin\Electronics/'
for basename in listdir(filedir):
    rename(join(filedir, basename), join(filedir, basename.split('.')[0]))
[http://www.cnblogs.com/ma6174/archive/2012/05/04/2482378.html]

[http://www.cnblogs.com/pzxbc/archive/2012/03/17/2404060.html]

from:http://blog.csdn.net/pipisorry/article/details/42167683

ref:http://www.cnpythoner.com/post/89.html


你可能感兴趣的:(python,OS,Path,SYS,重命名)