Chinaunix首页 | 论坛 | 博客
  • 博客访问: 778556
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类: 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]]])
具体用法:

  1. import os  
  2. for root, dirs, files in os.walk('/opt/'):  
  3.     print root   #当前遍历到的目录的根  
  4.     print dirs   #当前遍历到的目录的根下的所有目录  
  5.     print files  #当前遍历到的目录的根下的所有文件  


Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

# 例1:字符串截取 str = '12345678' print str[0:1] >> 1 # 输出str位置0开始到位置1以前的字符 print str[1:6] >> 23456 # 输出str位置1开始到位置6以前的字符 num = 18 str = '0000' + str(num) # 合并字符串 print str[-5:] # 输出字符串右5位 >> 00018

Python 替换字符串使用 变量.replace("被替换的内容","替换后的内容"[,次数]),替换次数可以为空,即表示替换所有。要注意的是使用replace替换字符串后仅为临时变量,需重新赋值才能保存。

# 例2:字符串替换 str = 'akakak' str = str.replace('k',' 8') # 将字符串里的k全部替换为8 print str >> 'a8a8a8' # 输出结果

Python 查找字符串使用 变量.find("要查找的内容"[,开始位置,结束位置]),开始位置和结束位置,表示要查找的范围,为空则表示查找所有。查找到后会返回位置,位置从0开始算,如果每找到则返回-1。

# 例3:字符串查找 str = 'a,hello' print str.find('hello') # 在字符串str里查找字符串hello >> 2 # 输出结果

Python 分割字符串使用 变量.split("分割标示符号"[分割次数]),分割次数表示分割最大次数,为空则分割所有。

例4:字符分割 str = 'a,b,c,d' strlist = str.split(',') # 用逗号分割str字符串,并保存到列表 for value in strlist: # 循环输出列表值 print value >> a # 输出结果 >> b >> c >> d

使用工厂方法 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]

阅读(4302) | 评论(0) | 转发(0) |
0

上一篇:嵌入式笔试题

下一篇:python程序打包

给主人留下些什么吧!~~