新闻动态   News
搜索   Search
你的位置:首页 > 新闻动态 > 技术文档

Python 编程常见问题

2013/8/22 15:15:54      点击:

Python 编程常见问题

经常使用Python编程,把经常遇到问题在这里记录一下,省得到网上查找,因此这篇文章会持续更新,需要的可以Mark一下。进入正题:

1.Python常用的文件头声明

  1. #!/usr/bin/python  
  2. #-*- coding: UTF-8 -*-  
  3. #  
  4. # @filename:   
  5. # @author:   
  6. # @since: 2013-  
  7. # @version: 0.0.1  
  8. #  
  9. # Usage:  
  10. ###############################################################################  
  11. import os  
  12. import sys  
  13. import shutil  
  14. import fileinput  
  15.   
  16. # utf8  
  17. import codecs  

2.Python命令参数解析(长参数和短参数)

  1. ###############################################################  
  2. # command line for this app:  
  3. #   $ python app.py -s 5555 -p 5556  
  4. # or  
  5. #   $ python app.py --sink-port 5555 --publish-port 5556  
  6. ###############################################################  
  7.   
  8. import os  
  9. import optparse  
  10.   
  11. pid = os.getpid()  
  12.   
  13. # parse our options  
  14. # see usage for optparse.OptionParser():  
  15. #   http://docs.python.org/2/library/optparse.html  
  16. #  
  17. parser = optparse.OptionParser()  
  18.   
  19. parser.add_option("-s""--sink-port",  
  20.     action="store",  
  21.     dest="sink_port",  
  22.     help="Specifies sink port on that service is listening")  
  23.   
  24. parser.add_option("-p""--publish-port",  
  25.     action="store",  
  26.     dest="publish_port",  
  27.     help="Specifies publish port service publish to")  
  28.   
  29. # parse args and get options  
  30. (options, args) = parser.parse_args()  
  31.   
  32. sink_port = options.sink_port  
  33. pub_port = options.publish_port  
  34.   
  35. print ("[Process:%d] is listening on (tcp://*:%s) and publish to (tcp://*:%s) ..." %  
  36.     (pid, sink_port, pub_port))  

3.Python获取外部中断命令(Ctrl+C)结束本程序

  1. import time  
  2. import os  
  3. import signal  
  4.   
  5. is_exit = False  
  6. pid = os.getpid()  
  7.   
  8. def sigint_handler(signum, frame):  
  9.     global is_exit  
  10.     is_exit = True  
  11.     print "[Process:%d] Receive a signal %d, is_exit = %d" % (pid, signum, is_exit)  
  12.   
  13. signal.signal(signal.SIGINT, sigint_handler)  
  14. signal.signal(signal.SIGTERM, sigint_handler)  
  15.   
  16. while not is_exit:  
  17.     # sleep 1 second  
  18.     time.sleep(1)  
  19.     print "."  
  20.   
  21. print "[Process:%d] exit!" % (pid)  

4.Python UTF-8文件操作

一个好的习惯就是永远使用UTF-8编码作一切事情,包括Python文件本身。下面使用UTF-8编码打开文件并写入数据
  1. #!/usr/bin/python  
  2. #-*- coding: UTF-8 -*-  
  3. # !!!请确保本Python文件以UTF-8保存!!!  
  4.   
  5. # utf8  
  6. import codecs  
  7.   
  8. def openFileUtf8(fname):  
  9.   fd = codecs.open(fname, "w", encoding = "UTF-8")  
  10.   return fd  
  11.   
  12. def closeFile(fd):  
  13.   fd.close()  
  14.   
  15. def writeUtf8(fd, str):  
  16.   fd.write(unicode(str, "UTF-8"))  
  17.   
  18. def writelnUtf8(fd, str):  
  19.   fd.write(unicode(str, "UTF-8") + '\r\n')  
  20.   
  21. fw = openFileUtf8("/path/to/yourfile.txt")  
  22. writeUtf8(fw, "我爱你,中国")  
  23. closeFile(fw)  

5.Python UTF-8中文字符串操作

下面演示如何获取UTF8字符串长度(有效文字个数)和截断:
  1. #!/usr/bin/python  
  2. #-*- coding: UTF-8 -*-  
  3. # !!!请确保本Python文件以UTF-8保存!!!  
  4. # 对于中文UTF-8编码的字符串,如何得到长度并截断其中的字符呢?  
  5. # 思路就是:  
  6. #   首先把UTF-8字符串转成UTF-16(Unicode)字符串,  
  7. #   然后判断UTF-16长度,截断UTF-16字符串,再转回UTF-8:  
  8.   
  9. import codecs  
  10.   
  11. utf8str = "我爱你love,中国"  
  12. print "utf8:", utf8str  
  13.   
  14. utf16str = utf8str.decode('utf-8')  
  15. print "utf16 len (==10):", len(utf16str)  
  16.   
  17. # 截取前3个字符  
  18. utf16str = utf16str[0:7]  
  19.   
  20. # 截取到的字符转回UTF-8  
  21. utf8substr = utf16str.encode('utf-8')  
  22.   
  23. print "utf8 substr:", utf8substr  
  24.   
  25. print "上面全部过程写成一句话: utf8substr = utf8str.decode('utf-8')[0:7].encode('utf-8') "  
  26. utf8substr = utf8str.decode('utf-8')[0:7].encode('utf-8')  
  27. print "utf8 substr:", utf8substr  
运行截图: