python-05
去除空格
方法一:使用字符串
#!/usr/bin/env pythonwhitespace = ' \t\n\r\v\f'def myStrip(chs):passdef myLstrip(chs):if len(chs) ==0:return chsstrlen = len(chs)for i in range(strlen):if chs[i] not in whitespace:breakelse:return ''return chs[i:]def myRstrip(chs):if len(chs) == 0:return chsstrlen =len(chs)for i in range(-1, -(strlen + 1), -1):if chs[i] not in whitespace:breakelse:return ''return chs[:i + 1]if __name__ == '__main__':myStr = ' hello 'print '|' + myStr + '|'# print '|' + myStrip[myStr] + '|'print '|' + myLstrip(myStr) + '|'print '|' + myRstrip(myStr) + '|'
方法二:使用列表
#!/usr/bin/env pythonwhitespace = ' \t\n\r\v\f'def myStrip(chs):passdef myLstrip(chs):if len(chs) == 0:return chschsList = []chsList.extend(chs)for i in range(len(chsList)):if chsList[0] in whitespace:chsList.pop(0)else:breakreturn ''.join(chsList)def myRstrip(chs):if len(chs) == 0:return chschsList = []chsList.extend(chs)for i in range(len(chsList)):if chsList[-1] in whitespace:chsList.pop()else:breakreturn ''.join(chsList)if __name__ == '__main__':myStr = ' hello 'print '|' + myStr + '|'# print '|' + myStrip[myStr] + '|'print '|' + myLstrip(myStr) + '|'print '|' + myRstrip(myStr) + '|'
创建一个整数到IP地址的转换程序,如下格式:WWW.XXX.YYY.ZZZ
如2130706433转换为127.0.0.1
#!/usr/bin/env pythondef ip2int(ipaddr):iplist = ipaddr.split('.')result = 0for i in range(4):result += int(iplist[i]) * (256 ** (3 - i))return resultdef int2ip(num):iplist = []for i in range(3):num, modnum = divmod(num, 256)iplist.insert(0,str(modnum))iplist.insert(0, str(num))return '.'.join(iplist)def test():ip = raw_input('Input an ip address: ')print ip2int(ip)number = int(raw_input('Input a number: '))print int2ip(number)if __name__ == '__main__':test()
一、字典的定义
>>> mydict = {'name' : 'tom', 'age' : 23}>>> adict = {}>>> bdict = {}.fromkeys(('x', 'y'), 10)>>> bdict{'y': 10, 'x': 10}- 打印字典的每个键-值对:
>>> for eachKey in bdict:... print '%s:%s' % (eachKey,bdict[eachKey])...y:10x:10>>> bdict{'y': 10, 'x': 10}更新字典>>> mydict['name'] = bobTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'bob' is not defined>>> mydict['name'] = 'bob'>>> mydict['email'] = 'bob@test.com'>>> mydict{'age': 23, 'name': 'bob', 'email': 'bob@test.com'}、删除>>> del mydict['age']>>>>>> mydict{'name': 'bob', 'email': 'bob@test.com'}>>> mydict.pop('name')'bob'>>> mydict{'email': 'bob@test.com'}>>> mydict.clear()>>> mydict{}
二、字典的方法:
>>> mydict = {'name' : 'bob', 'age' : 23}>>> mydict{'age': 23, 'name': 'bob'}>>> mydict.keys() 返回键['age', 'name']>>> mydict.values() 返回值[23, 'bob']>>> mydict.items() 返回键-值对的元组列表[('age', 23), ('name', 'bob')]>>> adict = {'email' : 'tom@test.com', 'phone' : '123456'}>>> mydict.update(adict) 把adict的内容,加入到mydict中>>> mydict{'phone': '123456', 'age': 23, 'name': 'bob', 'email': 'tom@test.com'}>>> adict{'phone': '123456', 'email': 'tom@test.com'}
三、字典练习
#!/usr/bin/env pythonimport getpassdb = {}def newUser():username = raw_input('username: ')if username in db:print "\033[32;1m%s alread exist!\033[0m" % usernameelse:# password = raw_input('password: ')password = getpass.getpass()db[username] = passworddef oldUser():username = raw_input('username: ')password = raw_input('password: ')if username in db:if db.get(username) == password:print '\033[32;1mlogin successful1\033[0m'else:print '\033[32;1mlogin incorrect.\033[0m'else:print '\033[32;1mlogin name is error.\033[0m'CMDs = {'n' : newUser, 'o' : oldUser}def showMenu():prompt = '''(New) user(Old) user(Quit).please input your choice: '''while True:choice = raw_input(prompt).strip()[0].lower()if choice not in 'noq':print '\033[31;1merror : n/o/q ...\033[0m'continueif choice == 'q':breakCMDs[choice]()if __name__ == '__main__':showMenu()
一、条件及语句
1、在python中没有case语句,可以使用if/elif,或者使用字典
#!/usr/bin/env pythondb = { 'create' : 'aaaa', 'del' : 'bbbb', 'modify' : 'cccc'}choice = raw_input('enter something:')if db.get(choice):print db[choice]
2、使用元组代替case
#!/usr/bin/env pythonchoice = raw_input('enter something:')if choice in ('create', 'delete', 'update'):action = '%s item' % choiceprint action
3、三元运算符
>>> x = 8>>> y = 5>>> smaller = x if x < y else y>>> smaller5
迭代器
>>> i = iter(range(10))>>> for j in i:... print j...0123456789>>> i = iter(range(4))>>> i.next()0>>> i.next()1>>> i.next()2>>> i.next()3>>> i.next()Traceback (most recent call last):File "<stdin>", line 1, in <module>StopIteration>>> a = xrange(3)>>> print axrange(3)>>> for i in a:... print i...012
4、使用range计算阶乘
#!/usr/bin/env pythona = 1num = int(raw_input('enter a number:'))for i in range(1, num + 1):a *= iprint a
5、使用递归函数计算阶乘
#!/usr/bin/env pythondef cf(num):if num == 1:return 1else:return num * cf(num - 1)if __name__ == '__main__':print cf(5)
注意:
重要:
当一个日志文件很大,比如G单位,不要直接打开
f = file('new.log')
data = ( line for line in f)
data
data.next()
文件操作
1、以只读方式打开文件
f = file('/root/bin/pwd.py')a = f.read() 将文件的全部内容读出来,成为一个大字符串,赋值给af.seek(0) 将文件指针移回到文件头部b = f.readlinse() 将文件的全部内容读出来,成为一个列表,赋值给bf.seek(0) 将文件指针称回到文件头部c = f.readline() 读取文件和一行,赋值给cf.seek(0, 0) 将文件指针称回到文件头部 第一个0为偏移量 第二个0相对位置 第二个值有0/1/2 0表示文件的开头 1表示当前位置 2表示文件结尾f.tell() 查看当前指针在什么位置for i in f:print i, 因为第一行发问已经有驾车了,就不要让print再打印
练习:
读取一个文件,移除以#开头的行,将其打印在屏幕上
方法一:
#!/usr/bin/env pythonimport sysdef grep1(fname):f = file(fname)for i in f:if i != '\n' and i.strip()[0] != '#':print i,f.close()if __name__ == '__main__':grep1(sys.argv[1])
方法二:
#!/usr/bin/env pythonimport sysdef grep1(fname):f = file(fname)for i in f:if i[0] in '#\n':continueelse:print i,f.close()if __name__ == '__main__':grep1(sys.argv[1])
方法三:推荐
#!/usr/bin/env pythonimport systry:f = open(sys.argv[1])except IndexError:print 'you must input a filename'except IOError:print 'no such file or file is a directory.'else:for i in f:if (not i.startswith('#')) and i != '\n':print i,f.close()
方法四:
#!/usr/bin/env pythonimport sysimport osdef grep1(fname):f = open(fname)for i in f:if(not i.startswith('#')) and i != '\n':print i,f.close()if __name__ == '__main__':grep1(sys.argv[1])

浙公网安备 33010602011771号