设为首页 收藏本站
查看: 802|回复: 0

[经验分享] Python 编程常见问题

[复制链接]

尚未签到

发表于 2017-4-23 13:40:56 | 显示全部楼层 |阅读模式
Python 编程常见问题
  经常使用Python编程,把经常遇到问题在这里记录一下,省得到网上查找,因此这篇文章会持续更新,需要的可以Mark一下。进入正题:

1.Python常用的文件头声明

#!/usr/bin/python
#-*- coding: UTF-8 -*-
#
# @filename:
# @author:
# @since: 2013-
# @version: 0.0.1
#
# Usage:
###############################################################################
import os
import sys
import shutil
import fileinput
# utf8
import codecs


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

###############################################################
# command line for this app:
#   $ python app.py -s 5555 -p 5556
# or
#   $ python app.py --sink-port 5555 --publish-port 5556
###############################################################
import os
import optparse
pid = os.getpid()
# parse our options
# see usage for optparse.OptionParser():
#   http://docs.python.org/2/library/optparse.html
#
parser = optparse.OptionParser()
parser.add_option("-s", "--sink-port",
action="store",
dest="sink_port",
help="Specifies sink port on that service is listening")
parser.add_option("-p", "--publish-port",
action="store",
dest="publish_port",
help="Specifies publish port service publish to")
# parse args and get options
(options, args) = parser.parse_args()
sink_port = options.sink_port
pub_port = options.publish_port
print ("[Process:%d] is listening on (tcp://*:%s) and publish to (tcp://*:%s) ..." %
(pid, sink_port, pub_port))


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

import time
import os
import signal
is_exit = False
pid = os.getpid()
def sigint_handler(signum, frame):
global is_exit
is_exit = True
print "[Process:%d] Receive a signal %d, is_exit = %d" % (pid, signum, is_exit)
signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGTERM, sigint_handler)
while not is_exit:
# sleep 1 second
time.sleep(1)
print "."
print "[Process:%d] exit!" % (pid)
4.Python UTF-8文件操作

一个好的习惯就是永远使用UTF-8编码作一切事情,包括Python文件本身。下面使用UTF-8编码打开文件并写入数据
#!/usr/bin/python
#-*- coding: UTF-8 -*-
# !!!请确保本Python文件以UTF-8保存!!!
# utf8
import codecs
def openFileUtf8(fname):
fd = codecs.open(fname, "w", encoding = "UTF-8")
return fd
def closeFile(fd):
fd.close()
def writeUtf8(fd, str):
fd.write(unicode(str, "UTF-8"))
def writelnUtf8(fd, str):
fd.write(unicode(str, "UTF-8") + '\r\n')
fw = openFileUtf8("/path/to/yourfile.txt")
writeUtf8(fw, "我爱你,中国")
closeFile(fw)
5.Python UTF-8中文字符串操作

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

运行截图:


6. MySQL - Python
  在Ubuntu上使用Python操作MySQL, 首先是安装:

$ wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
$ tar -zxvf MySQL-python-1.2.3.tar.gz
$ cd MySQL-python-1.2.3
$ sudo python setup.py install


错误解决办法:
错误:
Traceback (most recent call last):
File "setup.py", line 5, in
from setuptools import setup, Extension
ImportError: No module named setuptools
解决:
$ sudo apt-get install python-setuptools
错误:
sh: mysql_config: not found
...
EnvironmentError: mysql_config not found
解决:
$ sudo apt-get install libmysqlclient-dev

错误:
...
error: command 'gcc' failed with exit status 1
解决:
$ sudo apt-get install python-dev

7. 使用 MySQL - Python

http://www.cnblogs.com/ceniy/archive/2010/08/31/1814066.html

8. UTF-8 文件操作
  UTF-8的网站出现了中文乱码的问题,怀疑是缺少UTF-8 BOM头导致的。所以给所有HTML和JS文件添加了BOM头,问题解决。

def removeBomHeader(file):
BOM = b'\xef\xbb\xbf'
f = open(file, 'rb')
if f.read(3) == BOM:
fbody = f.read()
f.close()
with open(file, 'wb') as f:
f.write(fbody)
f.close()

def addBOMHeader(file):
BOM = b'\xef\xbb\xbf'
f = open(file, 'rb')
if f.read(3) != BOM:
f.close()
f = open(file, 'rb')
fbody = f.read()
f.close()
with open(file, 'wb') as f:
f.write(BOM)
f.write(fbody)
f.close()

(未完待续...)




  

  

  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368219-1-1.html 上篇帖子: python动态调用子类 下篇帖子: Python String Operation Basics
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表