1,查看python自带的lib, 例如:http://docs.python.org/3.1/library/
2,如果想看自己的python项目都导入了那些模块,可以用sys.modules输出来看下
>>> import sys
>>> sys.modules
3,以上只列出了当前已经import的module,磁盘上没有import的不会被列出来。之后进入/usr/local/lib/python2.7/ 这里看
4,擅用help()和dir()命令,例如:
help()
modules
5,另外,Python还提供了若干内置的函数,用于在运行时操作指定对象的属性。具体如下:
hasattr(obj, name) #判断obj对象是否具有名为name的属性
setattr(obj, name, value) #设置obj对象的名为name的属性值为value
getattr(obj, name) #获取obj对象的名为name的属性值
delattr(obj, name) #删除obj对象的名为name的属性
6,内置的dir()函数进行反射,从而了解到某个对象分别都包含哪些属性
type()函数获取对象的类型
所有的Python对象,都可以通过内置的id()函数获取该对象的唯一标示。而且当一个对象创建之后,这个唯一标示就会始终保持不变。
7,继承的语法
Python的继承语法,相比C++/Java而言,更加简洁。比如子类Child需要继承父类Parent,代码只需如下:
class Child(Parent) :
如果是多继承,代码大同小异:
class Child(Parent1, Parent2, Parent3) :
如果你想知道某个类有哪些父类(基类),只需要通过 Child.__bases__ 便可知晓。
===========================================================
===========================================================
1.这种方式的问题是,只列出当前import进上下文的模块.
进入python命令行.输入以下代码:
import sys
sys.modules
结果类似:
{‘copy_reg’: <module ‘copy_reg’ from ‘/usr/lib/python2.7/copy_reg.pyc’>, ‘sre_compile’: <module ‘sre_compile’ from ‘/usr/lib/python2.7/sre_compile.pyc’>, ‘_sre’: <module ‘_sre’ (built-in)>, ‘encodings’: <module ‘encodings’ from ‘/usr/lib/python2.7/encodings/__init__.pyc’>, ‘site’: <module ‘site’ from ‘/usr/lib/python2.7/site.pyc’>, ‘__builtin__’: <module ‘__builtin__’ (built-in)>, ‘sysconfig’: <module ‘sysconfig’ from ‘/usr/lib/python2.7/sysconfig.pyc’>, ‘__main__’: <module ‘__main__’ (built-in)>, ‘encodings.encodings’: None, ‘abc’: <module ‘abc’ from ‘/usr/lib/python2.7/abc.pyc’>, ‘posixpath’: <module ‘posixpath’ from ‘/usr/lib/python2.7/posixpath.pyc’>, ‘_weakrefset’: <module ‘_weakrefset’ from ‘/usr/lib/python2.7/_weakrefset.pyc’>, ‘errno’: <module ‘errno’ (built-in)>, ‘encodings.codecs’: None, ‘sre_constants’: <module ‘sre_constants’ from ‘/usr/lib/python2.7/sre_constants.pyc’>, ‘re’: <module ‘re’ from ‘/usr/lib/python2.7/re.pyc’>, ‘_abcoll’: <module ‘_abcoll’ from ‘/usr/lib/python2.7/_abcoll.pyc’>, ‘types’: <module ‘types’ from ‘/usr/lib/python2.7/types.pyc’>, ‘_codecs’: <module ‘_codecs’ (built-in)>, ‘_warnings’: <module ‘_warnings’ (built-in)>, ‘genericpath’: <module ‘genericpath’ from ‘/usr/lib/python2.7/genericpath.pyc’>, ‘stat’: <module ‘stat’ from ‘/usr/lib/python2.7/stat.pyc’>, ‘zipimport’: <module ‘zipimport’ (built-in)>, ‘encodings.__builtin__’: None, ‘warnings’: <module ‘warnings’ from ‘/usr/lib/python2.7/warnings.pyc’>, ‘UserDict’: <module ‘UserDict’ from ‘/usr/lib/python2.7/UserDict.pyc’>, ‘encodings.utf_8′: <module ‘encodings.utf_8′ from ‘/usr/lib/python2.7/encodings/utf_8.pyc’>, ‘sys’: <module ‘sys’ (built-in)>, ‘codecs’: <module ‘codecs’ from ‘/usr/lib/python2.7/codecs.pyc’>, ‘readline’: <module ‘readline’ from ‘/usr/lib/python2.7/lib-dynload/readline.so’>, ‘os.path’: <module ‘posixpath’ from ‘/usr/lib/python2.7/posixpath.pyc’>, ‘sitecustomize’: <module ‘sitecustomize’ from ‘/usr/lib/python2.7/sitecustomize.pyc’>, ‘signal’: <module ‘signal’ (built-in)>, ‘traceback’: <module ‘traceback’ from ‘/usr/lib/python2.7/traceback.pyc’>, ‘apport_python_hook’: <module ‘apport_python_hook’ from ‘/usr/lib/python2.7/dist-packages/apport_python_hook.pyc’>, ‘linecache’: <module ‘linecache’ from ‘/usr/lib/python2.7/linecache.pyc’>, ‘posix’: <module ‘posix’ (built-in)>, ‘encodings.aliases’: <module ‘encodings.aliases’ from ‘/usr/lib/python2.7/encodings/aliases.pyc’>, ‘exceptions’: <module ‘exceptions’ (built-in)>, ‘sre_parse’: <module ‘sre_parse’ from ‘/usr/lib/python2.7/sre_parse.pyc’>, ‘os’: <module ‘os’ from ‘/usr/lib/python2.7/os.pyc’>, ‘_weakref’: <module ‘_weakref’ (built-in)>}
2.在python命令行下输入:
help()
modules
===========================================================
===========================================================
1.os模块
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异常。
2.sys模块
系统信息和方法模块,提供了很多实用的变量和方法:
argv:命令行参数List,第一个元素是程序本身路径
builtin_module_names:Python解释器导入的模块列表
modules.keys():返回所有已经导入的模块列表
exc_info():获取当前正在处理的异常类
exc_type、exc_value、exc_traceback:当前处理的异常详细信息
executable:Python解释程序路径
exit(n):退出程序,正常退出时exit(0)
getwindowsversion():获取Windows的版本
hexversion:获取Python解释程序的版本值,16进制格式如:0x020403F0
version:获取Python解释程序的版本信息
maxint:最大的Int值
maxunicode:最大的Unicode值
modules:返回系统导入的模块字段,key是模块名,value是模块
path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
platform:返回操作系统平台名称
3.built-in内置模块
eval(expr[,globals[,locals]]):执行一段代码,并返回结果
exec(expr[,globals[,locals]]):执行一段代码
execfile(file[,globals[,locals]]):执行一个文件
filter(func,list):使用函数来过滤list,返回满足要求的list元素组
getattr(obj,name[,default]):获取对象的属性,若没有该属性,则返回默认值
setattr(obj,name,value):设置对象的属性,若没有该属性,则异常
hasattr(obj,name):返回对象是否有指定属性
input([prompt]):提示控制台输入,必须输入常量或变量,若想直接输入字符串,需要使用引号括起来
raw_input([prompt]):提示控制台输入,直接输入数字或字符串
open(filename,mode):打开文件,mode可以为:w,r,a,若想同时读写,则加上+,若想以二进制读写,则加上b
reload(module):再次导入已导入过的模块
type(obj):返回一个对象的类型
zip(seq1,...):将若干个元组进行合并,长度以元组中的最短的为准
4.time模块
这个模块定义的都是和时间、时钟、计时相关的内容:
clock():返回第一次调用到当前调用时的计时,是以秒为单位的浮点数
localtime([t]):返回时间的数组,有9个元素(年,月,日,时,分,秒,星期几,当年的第几天,是否夏令时),星期一为0
mktime(tlist):是localtime的反函数,将一个9元数组转成一个浮点时间值,后3个元素,系统会自己调整
sleep(n):挂起线程n秒
strftime(fstring[,t]):格式化显示时间,fstring常用关键字:
%a,%A:星期的缩写,全拼
%b,%B:月份的缩写,全屏
%c,%x,%X:本地默认表示法(日期时间,日期,时间)
%Y(%y:2位),%m,%d,%H,%M,%S:年月日时分秒
%w:星期,0为星期天
strptime(string[,format]):将字符串解析为9元素的时间数组
time():返回当前时间值,浮点数
更高级的用法可以使用datetime模块,创建其中的date,time对象,可以进行加减操作,得出timedelta对象。
5.re模块
限定符说明:
".": 匹配任何字符
"^": 匹配开头
"$": 匹配结尾
"*": 匹配0次或更多次之前的表达式。贪婪时,匹配尽可能多次
"+": 匹配1次或更多次之前的表达式。等价于{1,}
"?": 匹配0次或1次之前的表达式。等价于{0,1}
"*?,+?,??": 非贪婪匹配
"{m,n}": 贪婪式匹配之前的表达式m到n次
"{m,n}?": 非贪婪匹配之前的表达式m到n次
"\": 将下一个字符转义
[ABC]: 指定一个字符集
[^ABC]: 指定一个不在范围内的字符集
"A|B": 匹配条件A或条件B
(pattern): 匹配括号内的表达式,并作为匹配项
(?:pattern): 匹配括号内的表达式,但不作为匹配项
(?#...): 注释,忽略
(?=pattern): 预查,若之后的内容匹配表达式,则成立
(?!pattern): 预查,若之后的内容不匹配表达式,则成立
(?P<name>pattern): 给一个匹配项命名
(?P=name): 匹配与之前命名的匹配项内容相同的部分
如:s='12a34a56'
re.findall('12(?P<xxx>.).*(?P=xxx)56)', s)
(?P<xxx>.)匹配到a,则(?P=xxx)的内容也必须为a时才pp
(?iLmsux): 设置I,L,M,S,U,or X标记
转义符说明:
\A: 匹配开头
\Z: 匹配结尾
\b: 匹配开头或结尾的空字符串,通常是指单词边界 ???
\B: 匹配非开头和结尾的空字符串,通常是指非单词边界???
\d: 匹配一个数字。等价于[0-9]
\D: 匹配一个非数字。等价于[^0-9]
\s: 匹配一个空白字符。等价于[ \t\n\r\f\v]
\S: 匹配一个非空白字符。等价于[^ \t\n\r\f\v]
\w: 匹配一个字母数字字符。等价于[a-zA-Z0-9_]
\W: 匹配一个非字母数字字符。等价于[^a-zA-Z0-9_]
\\: 匹配一个反斜杠
\f: 匹配一个换页符。等价于\x0C 和 \cL
\n: 匹配一个换行符。等价于\x0A 和 \cJ
\r: 匹配一个回车符。等价于\x0D 和 \cM
\t: 匹配一个制表符。等价于\x09 和 \cI
\v: 匹配一个垂直制表符。等价于\x0B 和 \cK
\xHH: 匹配 HH,其中 HH 为十六进制转义值
\uHHHH: 匹配 HHHH,其中 HHHH 是一个用四个十六进制数字表示的Unicode字符
常用匹配:
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*\\?\\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
模块使用:
match:
search:
sub: 替换
subn: 替换并返回替换的次数
split: 分隔
findall: 查找所有匹配项
compile:
purge:
escape:
可选参数:
I(IGNORECASE): 忽略大小写
L(LOCALE): 使用\w,\W,\b,\B时依据本地配置???
M(MULTILINE): 多行,"^"匹配每行的开头,"$"匹配每行的末尾
S(DOTALL): 使"."匹配包含换行符在内的任意字符
X(VERBOSE): 忽略空白处和注释内容
U(UNICODE): 使\w,\W,\b,\B依靠UNICODE编码
===========================================================
===========================================================
Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Sound, OS interaction, Web,以及其他。推荐收藏。
Graphical interface wxPython http://wxpython.org
Graphical interface pyGtk http://www.pygtk.org
Graphical interface pyQT http://www.riverbankcomputing.co.uk/pyqt/
Graphical interface Pmw http://pmw.sourceforge.net/
Graphical interface Tkinter 3000 http://effbot.org/zone/wck.htm
Graphical interface Tix http://tix.sourceforge.net/
Database MySQLdb http://sourceforge.net/projects/mysql-python
Database PyGreSQL http://www.pygresql.org/
Database Gadfly http://gadfly.sourceforge.net/
Database SQLAlchemy http://www.sqlalchemy.org/
Database psycopg http://www.initd.org/pub/software/psycopg/
Database kinterbasdb http://kinterbasdb.sourceforge.net/
Database cx_Oracle http://www.cxtools.net/default.aspx?nav=downloads
Database pySQLite http://initd.org/tracker/pysqlite
MSN Messenger msnlib http://auriga.wearlab.de/~alb/msnlib/
MSN Messenger pymsn http://telepathy.freedesktop.org/wiki/Pymsn
MSN Messenger msnp http://msnp.sourceforge.net/
Network Twisted http://twistedmatrix.com/
Images PIL http://www.pythonware.com/products/pil/
Images gdmodule http://newcenturycomputers.net/projects/gdmodule.html
Images VideoCapture http://videocapture.sourceforge.net/
Sciences and Maths scipy http://www.scipy.org/
Sciences and Maths NumPy http://numpy.scipy.org/
Sciences and Maths numarray http://www.stsci.edu/resources/software_hardware/numarray
Sciences and Maths matplotlib http://matplotlib.sourceforge.net/
Games Pygame http://www.pygame.org/news.html
Games Pyglet http://www.pyglet.org/
Games PySoy http://www.pysoy.org/
Games pyOpenGL http://pyopengl.sourceforge.net/
Jabber jabberpy http://jabberpy.sourceforge.net/
Web scrape http://zesty.ca/python/scrape.html
Web Beautiful Soup http://crummy.com/software/BeautifulSoup
Web pythonweb http://www.pythonweb.org/
Web mechanize http://wwwsearch.sourceforge.net/mechanize/
Localisation geoname.py http://www.zindep.com/blog-zindep/Geoname-python/
Serial port pySerial http://pyserial.sourceforge.net/
Serial port USPP http://ibarona.googlepages.com/uspp
Parallel Port pyParallel http://pyserial.sourceforge.net/pyparallel.html
USB Port pyUSB http://bleyer.org/pyusb/
Windows ctypes http://starship.python.net/crew/theller/ctypes/
Windows pywin32 http://sourceforge.net/projects/pywin32/
Windows pywinauto http://www.openqa.org/pywinauto/
Windows pyrtf http://pyrtf.sourceforge.net/
Windows wmi http://timgolden.me.uk/python/wmi.html
PDA/GSM/Mobiles pymo http://www.awaretek.com/pymo.html
PDA/GSM/Mobiles pyS60 http://sourceforge.net/projects/pys60
Sound pySoundic http://pysonic.sourceforge.net/
Sound pyMedia http://pymedia.org/
Sound FMOD http://www.fmod.org/
Sound pyMIDI http://www.cs.unc.edu/Research/assist/developer.shtml
GMail libgmail http://libgmail.sourceforge.net/
Google pyGoogle http://pygoogle.sourceforge.net/
Expect pExpect http://pexpect.sourceforge.net/
WordNet pyWordNet http://osteele.com/projects/pywordnet/
Command line cmd http://blog.doughellmann.com/2008/05/pymotw-cmd.html
Compiler backend llvm-py http://mdevan.nfshost.com/llvm-py/
3D VPython http://vpython.org
===========================================================
===========================================================
__builtin__模块
这个模块包含Python中使用的内建函数,一般不用手动导入这个模块,Python会帮你做好一切。
下面将一一介绍这个模块所常有的函数。
1. 加载和重载模块:
import语句是用来导入外部模块的(也可使用from -- import)其实import是靠调用内建函数__import__来工作的。
例如 import spam 其实就是相当于执行下面一行代码
spam = __import__( 'spam' , globals() , locals() , [] , 0)
import spam.ham相当于执行下面一行代码
spam = __import__( 'spam.ham' , globals() , locals() , [] , 0)
from spam.ham import eggs , sausage as saus 相当于执行下面一行代码
_temp = __import__( 'spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
2. dir()
返回由给定模块,类,实例或其他类型的所有成员组成的列表。
[python] view plaincopy
<span style="font-size:14px;">import sys
def dump(value):
print(value,'=>',dir(value))
dump([]) #list
dump({}) #dictionary
dump('string')
dump(len) #function
dump(sys) #module</span>
3. vars()
返回的是包含每个成员当前值的字典,如果你使用不带参数的vars,它将返回当前局部名称空间的可见元素(同locals()函数)
[python] view plaincopy
<span style="font-size:14px;">book = 'library2'
pages = 250
scripts = 350
print('the %(book)s book contains more than %(scripts)s scripts'%vars())</span>
结果是:the library2 book contains more than 350 scripts
4. type()
允许你检查一个变量的类型,这个函数会返回一个type descriptor(类型描述符),它对于python解释器提供的每个类型都是不同的。
[python] view plaincopy
<span style="font-size:14px;">def dump(value):
print(type(value),value)
dump(1)
dump(1.0)
dump('one')</span>
结果:
<class 'int'> 1
<class 'float'> 1.0
<class 'str'> one
5. callable()
可以检查一个对象是否是可调用的,对于函数,方法,lambda函式,类,以及实现了__call__方法的类实例,它都返回True
<span style="font-size:14px;">def dump(function):
if callable(function):
print(function,'is callable')
else:
print(function,'is not callable')
class A:
def method(self,value):
return value
class B:
def __call__(self,value):
return value
a = A()
b = B()
dump(0)
dump('string')
dump(callable)
dump(dump)
dump(A)
dump(B)
dump(a)
dump(b)</span>
结果:
0 is not callable
string is not callable
<built-in function callable> is callable
<function dump at 0x00C4FED0> is callable
<class '__main__.A'> is callable
<class '__main__.B'> is callable
<__main__.A object at 0x00C6C1F0> is not callable
<__main__.B object at 0x00C6C2F0> is callable
6. isinstance()
检查一个对象是不是给定类(或其子类)的实例
<span style="font-size:14px;">class A:
pass
class B:
pass
class C(A):
pass
class D(A,B):
pass
def dump(object):
print(object,'=>')
if isinstance(object,A):
print('A')
if isinstance(object,B):
print('B')
if isinstance(object,C):
print('C')
if isinstance(object,D):
print('D')
a = A()
b = B()
c = C()
d = D()
dump(a)
dump(b)
dump(c)
dump(d)
dump(0)
dump('string') </span>
结果:
<__main__.A object at 0x00BADA30> =>
A
<__main__.B object at 0x00C6C1F0> =>
B
<__main__.C object at 0x00C6C2F0> =>
A
C
<__main__.D object at 0x00C6C3B0> =>
A
B
D
0 =>
string =>
7. issubclass()
用于检查一个类对象是否与给定类相同,或者是给定类的子类,注意isinstance可以接收任何对象作为参数,而issubclass函数在接受非类对象参数时会引发TypeError异常。
8. eval()
将一个字符串作为python表达式值,你可以传递一串文本,简单的表达式,或者使用内建python函数。
<span style="font-size:14px;">def dump(expression):
result = eval(expression)
print(expression,'=>',result,type(result))
dump('1')
dump('1.0')
dump('str')
dump('1.0+2.0')
dump("'*'*10")
dump("len('world')")</span>
结果:
1 => 1 <class 'int'>
1.0 => 1.0 <class 'float'>
str => <class 'str'> <class 'type'>
1.0+2.0 => 3.0 <class 'float'>
'*'*10 => ********** <class 'str'>
len('world') => 5 <class 'int'>
9. compile()
Eval函数只针对简单的表达式,如果处理大块的代码,你应该使用compile和exec函数,成功执行后,compile函数会返回一个代码对象,你可以使用exec语句执行它。
例1:
<span style="font-size:14px;">BODY = "print('the ant, an introduction')"
code = compile(BODY,'<script>','exec')
print(code)
exec(code) </span>
结果:
<code object <module> at 0x00B0B5C0, file "<script>", line 1>
the ant, an introduction
例2:
<span style="font-size:14px;">class CodeGeneratorBackend:
def begin(self,tab='\t'):
self.code = []
self.tab = tab
self.level = 0
def end(self):
self.code.append('')
return compile(''.join(self.code),'<code>','exec')
def write(self,str):
self.code.append(self.tab*self.level+str)
def indent(self):
self.level = self.level + 1
def dedent(self):
if self.level == 0:
raise SyntaxError('internal error in code generator')
self.level = self.level - 1
c = CodeGeneratorBackend()
c.begin()
c.write('for i in range(5):')
c.indent()
c.write("print('code generator made easy')")
c.dedent()
exec(c.end())</span>
结果:
code generator made easy
code generator made easy
code generator made easy
code generator made easy
code generator made easy
以上就是python的一些内建函数,当然这个是不全的,希望自己能够活学活用吧。
===========================================================
===========================================================
1.处理文件
内建的open/file函数用于创建,打开和编辑文件,而os模块提供了重命名和删除文件所需的函数
<span style="font-size:14px;">import os
def replace(file,search_for,replace_with):
back = os.path.splitext(file)[0]+'.bak'
print(back)
temp = os.path.splitext(file)[0]+'.tmp'
fi = open(file)
fo = open(temp,'w')
try:
os.remove(temp)
except os.error:
pass
for s in fi.readlines():
fo.write(str.replace(s, search_for,replace_with))
fi.close()
fo.close()
try:
os.remove(back)
except os.error:
pass
os.rename(file, back)
os.rename(temp,file)
file = 'g:/csy.txt'
replace(file,'hello','tjena')
replace(file,'tjena','hello') </span>
2. 处理目录
os模块也包含一些用于目录处理的函数,listdir函数返回给定目录中所有文件名(包括目录名)组成的列表
<span style="font-size:14px;">import os
for file in os.listdir('g:/my_paper'):
print(file)</span>
getcwd和chdir函数分别用于获得和改变当前工作目录[python] view plaincopy
<span style="font-size:14px;">import os
cwd = os.getcwd()
print('1',cwd)
os.chdir('g:\\my_paper')
print('2',os.getcwd())
os.chdir(os.pardir)
print('3',os.getcwd())</span>
结果:
1 D:\Workspaces\MyEclipse 10\python1.0\src\Mysource\Module
2 g:\my_paper
3 g:\
makedirs和removedirs函数用于创建或删除目录层
<span style="font-size:14px;">import os
os.makedirs('g:\\test\\multiple\\levels')
fp = open('g:\\test\\multiple\\levels\\file.txt','w')
fp.write('inspector praline')
fp.close()
os.remove('e:\\test\\multiple\\levels\\file.txt')
os.removedirs('e:\\test\\multiple\\levels')</span>
removedirs函数会删除所给路径中最后一个目录下所有的空目录,而mkdir和rmdir函数只能处理单个目录级
3. 处理文件属性
Stat函数可以用来获取一个存在文件的信息,它返回一个类元组对象(stat_result对象,包括10个元素),依次是st_mode(权限模式),st_ino(inode number),st_dev(device),st_nlink(number of hard links),st_uid(所有者用户ID),st_gid(所有者所在组ID),st_size(文件大小,字节),st_atime(最近一次访问时间),st_mtime(最近修改时间),st_ctime(平台相关,Unix下的最近一次元数据/metadata修改时间,或者windows下的创建时间)
<span style="font-size:14px;">import os
import time
file = 'g:\\my_paper\\paper.wps'
def dump(st):
mode,ino,dev,nlink,uid,gid,size,atime,mtime,ctime=st
print('-size:',size,'bytes')
print('-owner:',uid,gid)
print('-created:',time.ctime(ctime))
print('-last accessed:',time.ctime(atime))
print('-last modified:',time.ctime(mtime))
print('-mode:',oct(mode))
print('-inode/dev:',ino,dev)
st = os.stat(file)
print('stat',file)
dump(st)
fp = open(file)
st = os.fstat(fp.fileno())
print('fstat',file)
dump(st)</span>
stat模块包含了很多可以处理该返回对象的常量及函数,下面代码展示了其中的一些,可以使用chmod和utime函数修改文件的权限模式和时间属性。
<span style="font-size:14px;">import time,stat,os
infile = 'g:\\samples\\sample.txt'
outfile = 'g:\\sample.txt'
fi = open(infile,'rb')
fo = open(outfile,'wb')
while 1:
s = fi.read(10000)
if not s:
break
fo.write(s)
fi.close()
fo.close()
st = os.stat(infile)
os.chmod(outfile, stat.S_IMODE(st[stat.ST_MODE]))
os.utime(outfile, (st[stat.ST_ATIME], st[stat.ST_MTIME]))
print('original','=>')
print('mode',oct(stat.S_IMODE(st[stat.ST_MODE])))
print('atime',time.ctime(st[stat.ST_ATIME]))
print('mtime',time.ctime(st[stat.ST_MTIME]))
print('copy','=>')
st = os.stat(outfile)
print('mode',oct(stat.S_IMODE(st[stat.ST_MODE])))
print('atime',time.ctime(st[stat.ST_ATIME]))
print('mtime',time.ctime(st[stat.ST_MTIME]))</span>
结果:
original =>
mode 0o666
atime Mon Dec 17 10:18:29 2012
mtime Mon Dec 17 10:18:41 2012
copy =>
mode 0o666
atime Mon Dec 17 10:18:29 2012
mtime Mon Dec 17 10:18:41 2012
4. 处理进程
system 函数在当前进程下执行一个新命令,并等待它完成
<span style="font-size:14px;">import os
if os.name == 'nt':
command = 'dir'
else:
command = 'ls -l'
os.system(command)</span>
处理进程还有好多命令在这里就不一一列举。
5. os.path模块
5.1处理文件名
Os.path模块包含了许多与平台无关的处理长文件名的函数,也就是说你不需要处理前后斜杠,冒号等
<span style="font-size:14px;">import os
filename = 'my/little/pony'
print('using',os.name,'...')
print('split','=>',os.path.split(filename))
print('splitext','=>',os.path.splitext(filename))
print('dirname','=>',os.path.dirname(filename))
print('basename','=>',os.path.basename(filename))
print('join','=>',os.path.join(os.path.dirname(filename),os.path.basename(filename)))</span>
结果:
using nt ...
split => ('my/little', 'pony')
splitext => ('my/little/pony', '')
dirname => my/little
basename => pony
join => my/little\pony
6. stat模块
<span style="font-size:14px;">import stat,os,time
st = os.stat('g:\\samples/sample.txt')
print('mode','=>',oct(stat.S_IMODE(st[stat.ST_MODE])))
print('type','=>')
if stat.S_ISDIR(st[stat.ST_MODE]):
print('DIRECTORY')
if stat.S_ISREG(st[stat.ST_MODE]):
print('REGULAR')
if stat.S_ISLNK(st[stat.ST_MODE]):
print('LINK')
print('size','=>',st[stat.ST_SIZE])
print('last accessed','=>',time.ctime(st[stat.ST_ATIME]))
print('last modified','=>',time.ctime(st[stat.ST_MTIME]))
print('inode changed','=>',time.ctime(st[stat.ST_CTIME]))</span>
结果:
mode => 0o666
type =>
REGULAR
size => 0
last accessed => Mon Dec 17 10:51:24 2012
last modified => Mon Dec 17 10:51:24 2012
inode changed => Mon Dec 17 10:51:24 2012
7. string模块
<span style="font-size:14px;">text = "Monty Python's Flying Circus"
print('upper','=>',text.upper())
print('lower','=>',text.lower())
print('split','=>',text.split())
print('join','=>',text.join(text.split()))
print('replace','=>',text.replace('python','java'))
print('find','=>',text.find('python'),text.find('java'))
print('count','=>',text.count('n'))</span>
结果:
upper => MONTY PYTHON'S FLYING CIRCUS
lower => monty python's flying circus
split => ['Monty', "Python's", 'Flying', 'Circus']
join => MontyMonty Python's Flying CircusPython'sMonty Python's Flying CircusFlyingMonty Python's Flying CircusCircus
replace => Monty Python's Flying Circus
find => -1 -1
count => 3
8. copy模块
copy模块包含两个函数,用来拷贝对象,copy(object) => object创建给定对象的浅/浅层(shallow)拷贝,这里的浅/浅层(shallow)拷贝的意思是复制对象本身,但当对象时一个容器时,它的成员任然指向原来的成员对象。
<span style="font-size:14px;">import copy
a = [[1],[2],[3]]
b = copy.copy(a)
print('before','=>',a,b)
a[0][0] = 0
a[1] = None
print('after','=>',a,b)</span>
结果:
before => [[1], [2], [3]] [[1], [2], [3]]
after => [[0], None, [3]] [[0], [2], [3]]
其实也可以使用[:]语句来对列表进行浅层复制,相反了deepcopy(object) => object创建一个对象的深层拷贝,当对象是一个容器时,所有的成员都被递归的复制了。
<span style="font-size:14px;">import copy
a = [[1],[2],[3]]
b = copy.deepcopy(a)
print('before','=>',a,b)
a[0][0] = 0
a[1] = None
print('after','=>',a,b)</span>
结果:
before => [[1], [2], [3]] [[1], [2], [3]]
after => [[0], None, [3]] [[1], [2], [3]]
9. sys模块
9.1 解释器启动后,argv解表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称。
<span style="font-size:14px;">import sys
print('script name is',sys.argv[0])
if len(sys.argv)>1:
print('there are',len(sys.argv)-1,'arguments:')
for arg in sys.argv[1:]:
print(arg)
else:
print('there are no arguments!')</span>
结果:
script name is D:\Workspaces\MyEclipse 10\python1.0\src\Mysource\Module\Test.py
there are no arguments!
9.2 stdin,stdout以及stderr
[python] view plaincopy
<span style="font-size:14px;">import sys
class Redirect:
def __init__(self,stdout):
self.stdout = stdout
def write(self,s):
self.stdout.write(s.lower())
old_stdout = sys.stdout
sys.stdout = Redirect(sys.stdout)
print('HEJA SVERIGE')
print('FRISKT HUM')
sys.stdout = old_stdout
print('MLASJDL;JG;')</span>
结果:
heja sverige
friskt hum
MLASJDL;JG;
要重定向输出只要创建一个对象,并实现它的write方法。