今后无特别说明,环境一般是:
环境1:windows idle / python version 2.7.2
环境2:LINUX: python --version Python 2.5.2
1、python 输出中文问题解决
#!/usr/bin/python # -*- coding: utf-8 -*- #filename : output_chinese.py print "say hello to world !" s0 = '向世界打个招呼' s1 = u'向世界打个招呼' print repr(s0) print repr(s1) print s0.decode('utf-8') print s1 print s1.encode('gbk')
>>> ================================ RESTART ================================ >>> say hello to world ! '\xe5\x90\x91\xe4\xb8\x96\xe7\x95\x8c\xe6\x89\x93\xe4\xb8\xaa\xe6\x8b\x9b\xe5\x91\xbc' u'\u5411\u4e16\u754c\u6253\u4e2a\u62db\u547c' 向世界打个招呼 向世界打个招呼 向世界打个招呼 >>>其它环境如eclipse(比较麻烦),参考:
http://blog.csdn.net/alex197963/article/details/1569207
2、求list的交集或差集
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :intersection.py a = [1,2,3,4,5] b = [3,4,5,6,7] c = [x for x in a if x in b] #求两个list的交集 print c d = [x for x in a if x not in b] #求a不在b中的差集,同理可求b不在a中的差集 print d # 类似用法 #(1)判断字符或串是否在某一个字符串中 字符串1 in 或 not in 字符串2 uname = 'say hello to world' keyword= 'saym' #改为say,见输出2 if keyword in uname: print 'right' else: print 'wrong'
>>> [3, 4, 5] [1, 2] wrong >>>
>>> [3, 4, 5] [1, 2] right3、写一个简单的socket编程
编写服务端步骤:
1.
第一步是创建socket对象。调用socket构造函数。如:
socket = socket.socket( family, type )
family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
2.
第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:
socket.bind( address )
由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
3.
第三步是使用socket套接字的listen方法接收连接请求。
socket.listen( backlog )
backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
4.
第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。
connection, address = socket.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
5.
第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
6.
传输结束,服务器调用socket的close方法关闭连接。
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :socket_sever.py import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8001)) sock.listen(5) while True: connection.address = sock.accept() try: connection.settimeout(5) buf = connection.recv(1024) if buf == '1': connection.send('welcome to server!') else: connection.sent('please go out!') except socket.timeout: print "time out" connection.close()python编写client的步骤:
创建一个socket以连接服务器:socket = socket.socket( family, type )
2.
使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:
socket.connect( (host,port) )
host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
3.
处理阶段,客户和服务器将通过send方法和recv方法通信。
4. 传输结束,客户通过调用socket的close方法关闭连接。
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :socket_client.py import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost',8001)) import time time.sleep(2) sock.send('1') print sock.recv(1024) sock.close()
测试: >>> welcome to server! >>> ================================ RESTART ================================ >>> welcome to server!
yee@Loong:/home/julius/python$ python socket_client.py welcome to server! yee@Loong:/home/julius/python$ python socket_client.py welcome to server! 将一个完整的域名(www.ibm.com)解析成一个使用点号分隔的 IP 地址字符串
>>> import socket >>> socket.gethostbyname('www.baidu.com') '115.239.210.27' >>> socket.gethostbyname('www.ibm.com') '129.42.56.216' >>>socket 编程的更多基础内容参考:
http://blog.csdn.net/gdreamlend/article/details/7424150
4、python 异常处理
1、try...except语句try...except语句可以用于捕捉并处理错误。通
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :try_except.py import sys try: s = raw_input('enter something --->') except EOFError: print '/n why did you do an EOF on me?' sys.exit() except: print '/n some error coourred' print 'done'
>>> enter something --->-1 done >>> ================================ RESTART ================================ >>> /n some error coourred done >>>
2、引发异常你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :raise.py class ShortInputException(Exception): " self defined exception class " def __init__(self,length,atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = raw_input('please input --> ') if len(s) < 3: raise ShortInputException(len(s),3) #引发一个自定义的异常 except EOFError: print '/n you have been inputed an EOF' except ShortInputException, x: print '''ShortInputException: the length of the input must be: %d, / at least: %d''' % (x.length, x.atleast) else: #这个else没有和if配对吗?不能和if有相同的缩进,为什么呢??? print 'no exception occured !'
>>> ================================ RESTART ================================ >>> please input --> #ctrl+d 或 ctrl+z 一般是EOF的输入方法 /n you have been inputed an EOF >>> ================================ RESTART ================================ >>> please input --> 12 ShortInputException: the length of the input must be: 2, / at least: 3 >>> ================================ RESTART ================================ >>> please input --> wert no exception occured ! >>>注意:ctrl+d 或 ctrl+z 一般是EOF的输入方法
#!/usr/bin/python # -*- coding: utf-8 -*- #filename :try_finally.py import time try: f = file('123.txt') while True: # 读文件的一般方法 line = f.readline() if len(line) == 0: break time.sleep(3) #每隔3秒输出一行 print line finally: f.close() print 'Cleaning up, closed the file'
>>> ================================ RESTART ================================ >>> def f(): try: 1/0 finally: return 42 >>> f() 42 Cleaning up, closed the file >>> ================================ RESTART ================================ >>> def f(): try: Cleaning up, closed the file Traceback (most recent call last): File "F:/interview/test1.py", line 13, in <module> time.sleep(3) #每隔3秒输出一行 KeyboardInterrupt >>>说明:我们在3秒这段时间内按下了Ctrl-c,这将产生一个KeyboardInterrupt异常,我们并没有处理这个异常,那么Python将调用默认的处理方式。