Python中的splitlines用来分割行。当传入的参数为True时,表示保留换行符 \n。通过下面的例子就很明白了:
基本语法:S.splitlines(keepends=False) -> list of strings
mulLine = """Hello!!!
Wellcome to Python‘s world!
There are a lot of interesting things!
Enjoy yourself. Thank you!"""
print ‘‘.join(mulLine.splitlines())
print ‘------------‘
print ‘‘.join(mulLine.splitlines(True))
利用这个函数,就可以非常方便写一些段落处理的函数了,比如处理缩进等方法。如Cookbook书中的例子:
def addSpaces(s, numAdd):
white = " "*numAdd
return white + white.join(s.splitlines(True))
def numSpaces(s):
return [len(line)-len(line.lstrip( )) for line in s.splitlines( )]
def delSpaces(s, numDel):
if numDel > min(numSpaces(s)):
raise ValueError, "removing more spaces than there are!"
return ‘\n‘.join([ line[numDel:] for line in s.splitlines( ) ])
def unIndentBlock(s):
return delSpaces(s, min(numSpaces(s)))
Os.path.isdir(path)
os.path.isdir(folder + ‘/‘ + fileName):
读取所有内容read()
读取固定的字节read(int)
读取每行readlines()
遍历:for files in files1:
Print files
追加w+
写入多行writelines
注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
读取文件中特定的一行
Linecache模块
例子:print linecache.getline(‘2.1_open.py‘, 4)
计算指定的时间
import datetime,calendar
lastFriday=datetime.date.today()
oneday=datetime.timedelta(days=1)
lastFriday-=oneday
while lastFriday.weekday()!=calendar.FRIDAY:
lastFriday-=oneday
print lastFriday.strftime(‘%A,%d-%b-%Y‘)
计算当前时间和过去时间之间的差:
t1 = datetime.datetime.now()
quickshort(data, 0, len(data) - 1)
t2 = datetime.datetime.now()
print t1 - t2
Sys.argv[]本身是个路径,是从1开始
1表示是spe
Copy.copy()浅复制
Copy.deepcopy()深复制
For遍历几种
For iter in seq:print iter
For index in range(len(ser))):print ser[index]
For index,iter in enumerate(s):print index,iter
多组数组
比如5*3每项为0的数组
multilist = [[0 for col in range(5)] for row in range(3)]
一维:[int]*int
二维:[[int]*int]*int
因为[0] * 5是一个一维数组的对象,* 3的话只是把对象的引用复制了3次,比如,我修改multi[0][0]:
multi = [[0] * 5] * 3
multi[0][0] = ‘Love China‘print multi
修改了multi[0][0],却把我们的multi[1][0],multi[2][0]也修改了。这不是我们想要的结果。
multilist = [[0] * 5 for row in range(3)]
multilist[0][0] = ‘Love China‘print multilist
我们看输出结果:
[[‘Love China‘, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
恩,没问题。但是,由于使用 * 的方法比较容易引起混淆导致Bug,所以还是推荐使用上面第一种方法,即:multilist = [[0 for col in range(5)] for row in range(3)]
__getattr__和__setattr__可以用来对属性的设置和取值进行处理
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->class Book(object):
def __setattr__(self, name, value):
if name == ‘value‘:
object.__setattr__(self, name, value - 100)
else:
object.__setattr__(self, name, value)
def __getattr__(self, name):
try:
return object.__getattribute__(name)
except:
return name + ‘ is not found!‘
def __str__(self):
return self.name + ‘ cost : ‘ + str(self.value)
c = Book()
c.name = ‘Python‘
c.value = 100
print c.name
print c.value
print c
print c.Type
__metaclass__魔法
只要设置成任意的与type相同的参数可调用对象,就能够提供自定义元类
class PointlessMetaclass(type): def __new__(meta, name, bases, attrs): # do stuff... return type.__new__(meta, name, bases, attrs)
__new__ 方法中我们能够读取或改变传入的用以创建新类的参数。从而能够内省属性字典和改动、增加或者删除成员。
尽管当实例化一个类时这两个函数都会被调用,但覆盖 __new__ 比 __init__ 更为重要。__init__ 初始化一个实例,而__new__ 的职责是创建它。因此如果元类用以自定义类的创建,就需要覆盖 type 的 __new__。
使用新类而非仅仅提供工厂函数的原因在于如果使用工厂函数(那样只是调用 type)的话元类不会被继承。
class WhizzBang(object):... __metaclass__ = PointlessMetaclass...>>> WhizzBang<class ‘__main__.WhizzBang‘>>>> type(WhizzBang)<class ‘__main__.PointlessMetaClass‘>
WhizzBang 是一个类,但它现在已经不是 type 的实例,而是我们自定义的元类的实例了……
元类将用在创建使用了它的新类时调用,这里是一些关于这样做的好处的观点:
- 装饰(Decorate)类的所有方法,用以日志记录或者性能剖分。
- 自动 Mix-in 新方法
- 在创建时注册类。(例如自动注册插件或从类成员创建数据库模式。)
- 提供接口注册,功能自动发现和接口适配。
- 类校验:防止子类化,校验所有的方法是否都有 docstrings。
最重要之处在于元类中是在最后对 type 的调用时才真正创建类,所以可以自由地随你喜欢地改变属性字典(以及名称和元组形式的基类序列)。
一些流行的 Python ORM(Object Relational Mappers(对象关系影射),用以和数据库协同工作)也如此使用元类。
哦,还有因为元类是继承的,所以你能够提供一个使用了你的元类的基类,而继承自它的子类就无需显式声明它了。
Python里面的Decorators对函数、方法或类进行装饰,从而达到增加对象的职责,或控制对象调用的作用
class Coffee(object): def get_cost(self): return 1.0
coffee = Coffee()print coffee.get_cost() # 1.0
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->class Milk(Coffee):
def __init__(self, coffee):
self.coffee = coffee
def get_cost(self):
return self.coffee.get_cost() + 0.5
coffee = Coffee()
coffee = Milk(coffee)
print coffee.get_cost() # 1.5
他们就是filter, map,reduce。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>>
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>>
>>> print reduce(lambda x, y: x + y, foo)
创建一个函数数组fs=[f0,...,f9] where fi(n)=i+n.
fs = [(lambda n, i=i : i + n) for i in range(10)]
fs[3](4)
http://www.cnblogs.com/coderzh/archive/2010/05/02/python-cookbook-pyspy.html
‘;‘.join(["%s=%s"%(k,v)for k,v in par.items()])
S.join(iterable) -> string
myP={‘sea‘:‘china‘,\
‘data‘:‘dog‘,\
‘uid‘:‘sq‘,\
‘pwd‘:‘ser‘\
}