今后无特别说明,环境一般是:
环境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]
right
3、写一个简单的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的步骤:
1.
创建一个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
>>>
说明:每个try语句都必须有至少一个except语句。如果有一个异常程序没有处理,那么Python将调用默认的处理器处理,并终止程序且给出提示。
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的输入方法3、try...finally语句当你正在读文件或还未关闭文件时发生了异常该怎么办呢?你应该使用try...finally语句以释放资源
#!/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将调用默认的处理方式。
本文来自博客园,作者:{Julius},转载请注明原文链接:https://www.cnblogs.com/bestechshare/p/16447837.html
可微信加我,了解更多,WeChat:{KingisOK}