分类: LINUX
2012-08-13 14:45:22
今天看到os.walk函数的原型,我觉得还是有必要记录一下:walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
该函数式穿件一个生成器对象来遍历整棵目录树。top指定目录的顶级,而topdown是一个布尔值,用于指示由上而下(默认值)还是由下而上来遍历目录。返回的生成器将生成元组(dirpath,dirnames,filenames),其中dirpath是一个字符串,包含通向目录的路径,dirnames是dirpath中所有子目录的一个列表,而filename是dirpath中文件的一个列表,不包括目录。oneerror参数是一个接受单个参数的函数。如果处理期间出现任何错误,将使用os.error的是咧来调用此函数。默认行为时忽略错误。如果由上而下地遍历目录,修改dirnames将影响到遍历过程。
这个函数就是os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
具体用法:
Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。
Python 替换字符串使用 变量.replace("被替换的内容","替换后的内容"[,次数]),替换次数可以为空,即表示替换所有。要注意的是使用replace替换字符串后仅为临时变量,需重新赋值才能保存。
Python 查找字符串使用 变量.find("要查找的内容"[,开始位置,结束位置]),开始位置和结束位置,表示要查找的范围,为空则表示查找所有。查找到后会返回位置,位置从0开始算,如果每找到则返回-1。
Python 分割字符串使用 变量.split("分割标示符号"[分割次数]),分割次数表示分割最大次数,为空则分割所有。
使用工厂方法 set()和 frozenset():
>>> s = set('cheeseshop')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t = frozenset('bookshop')
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> type(s)
>>> type(t)
|
用各种集合内建的方法和操作符添加和删除集合的成员:
>>> s.add('z')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's', 'z'])
>>> s.update('pypi')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])
>>> s.remove('z')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
>>> s -= set('pypi')
>>> s
set(['c', 'e', 'h', 'o', 's']) |
删除集合
del s |
成员关系 (in, not in)
>>> s = set('cheeseshop')
>>> t = frozenset('bookshop')
>>> 'k' in s
False
>>> 'k' in t
True
>>> 'c' not in t
True |
集合等价/不等价
>>> s == t
False
>>> s != t
True
>>> u = frozenset(s)
>>> s == u
True
>>> set('posh') == set('shop')
True |
差补/相对补集( – )
两个集合(s 和t)的差补或相对补集是指一个集合C,该集合中的元素,只属于集合s,而不属于集合t。差符号有一个等价的方法,difference().
>>> s - t
set(['c', 'e']) |
对称差分( ^ ):对称差分是集合的XOR
利用集合去除列表中的重复元素
一、先介绍下file、seek、truncate的基本用法:
seek(offset,where): where=0从起始位置移动,1从当前位置移动,2从结束位置移动。当有换行时,会被换行截断。seek()无返回值,故值为None。
tell(): 文件的当前位置,即tell是获得文件指针位置,受seek、readline、read、readlines影响,不受truncate影响
truncate(n): 从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除。其中win下的换行代表2个字符大小。
readline(n):读入若干行,n表示读入的最长字节数。其中读取的开始位置为tell()+1。当n为空时,默认只读当前行的内容
readlines读入所有行内容
read读入所有行内容
二、以下以1个例子说明以上各个函数的作用
fso = open("f:\\a.txt",'w+') '以w+方式,并非a方式打开文件,故文件原内容被清空
print fso.tell() '文件原内容被清空,故此时tell()=0
fso.write("abcde\n") '写入文件abcde\n,因为换行\n占两个字符,故共写入7个字符
print fso.tell() '此时tell()=7
fso.write("fghwm") '又写入文件fghwm,故此时文件共写入7+5 =142个字符
print fso.tell() '此时tell()=12
fso.seek(1, 0) '从起始位置即文件首行首字符开始移动1个字符
print fso.tell() ‘此时tell() =1
print fso.readline() '读取当前行,即文件的第1行,但是从第二个字符(tell()+1)开始读,结果为:bcde。
'若换成for读取整个文件或read读取整个文件则结为bcdefghwm
print fso.tell() ‘因为readline此时tell() =7,
fso.truncate(8) '从写入后文件的首行首字符开始阶段,截断为8个字符,即abcde\nf,即文件的内容为:abcde\nf
print fso.tell() ‘tell() 依旧为7,并为受truncate(8)影响,但是此时文件内容为abcde\nf
print fso.readline() ‘从tell()+1=8开始读取,读取当前行内容:f
fso.close()
>>> xs = [5, 8, 5, 1, 1, 4, 2, 4, 3, 2]
>>> set(xs)
set([1, 2, 3, 4, 5, 8])
>>> sorted(set(xs), key=xs.index) # 保持原来的顺序
[5, 8, 1, 4, 2, 3] |