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

1) 在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

2) 在RHEL6.x上使用Python操作MySQL:

# cd MySQL-python-1.2.3
# python ez_setup.py -U setuptools
# yum install -y python-devel
# python setup.py build
# python setup.py install
# python
>>> import MySQLdb

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()

打开终端,设置为utf-8显示模式:

python

import codec

>>> s= u'\u7f8e\u9cf3'
>>> s= u'\u7f8e\u9cf3'
>>> s
u'\u7f8e\u9cf3'
>>> print s
美鳳
>>> u16 = u'\u7f8e\u9cf3'
>>> print u16
美鳳
>>> u8=u16.encode('utf-8')
>>> print u8
美鳳
>>> u8
'\xe7\xbe\x8e\xe9\xb3\xb3'
>>> type(u16)
<type 'unicode'>
>>> type(u8)
<type 'str'>
>>>

(未完待续...)

Python 编程常见问题的更多相关文章

  1. 测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)

    本文为霍格沃兹测试学院学员学习笔记. 本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如有错误的地方,欢迎 ...

  2. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  3. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  4. Python编程核心之makeTextFile.py和readTextFile.py

    引言: 最近大半年都在学习python编程,在双十一的时候购买了<Python编程核心>,看到makeTextFile.py和readTextFile.py两个例子有点错误,所以在这里给修 ...

  5. Python编程规范(PEP8)

    Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...

  6. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  7. android编程常见问题-程序真机中不显示

    新手编程常见问题: 问题表现:连接上手机后,程序不显示 解决版本:检查AndroidManifest.xml 文件中SDK版本的设置(要求要兼容当前手机版本系统),如下:

  8. android编程常见问题-程序在模拟器中不显示

    新手编程常见问题: 问题表现:程序运行成功,但是在模拟器中不显示 解决办法:检查项目版本和模拟器版本是否匹配或兼容,如果不匹配,选择和模拟器版本一致 项目版本:右键-Properties-androi ...

  9. 学习Python编程的11个资源

    用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程语言.如果你正打算学习 web 开发,Python 是一个不错的选择,甚至你想学游戏开发也可 以从 Python 开始,因 ...

随机推荐

  1. Error:Cannot build Artifact :war exploded because it is included into a circular depency

    找到项目的目录 查找artifacts文件夹 删掉不是你项目名称的那个 问题出现的原因是你该项目名字了 造成tomcat发布两个网页 发布两个网页不是什么大问题 但是这两玩意地址一样 争夺资源啊冲突之 ...

  2. 我与android的缘分

    android的开始 本人是一名大三的学生,大一大二主要学习的是php后台开发,在大一的时候做过一些小的网站系统,也参加过一些大学生计算机相关的比赛.这次开始着手于安卓开发,也是一时的兴起.因为跟我们 ...

  3. (一)python基础知识

    Python:解释型语言(一边翻译一边运行)注释:单行注释(#).多行注释(ctrl+/):''' '''和""" """ (python2 ...

  4. 百度音乐flac 下载

    破解百度音乐白金会员 为了给Play Music上传标签齐全的正版的mp3,本屌翻遍网络苦思冥想.现在终于被我找到了破解之法——破解百度白金会员!破解之后可以直接从百度下载正版授权的320k文件,更可 ...

  5. exp和imp的工作原理

    --1.exp和imp的输入都是名字和值对: 如:exp parameter_name=value 或exp parameter_name=(value1,value2,value3..) --2.e ...

  6. MongoDB 删除文档

    ongoDB remove()函数是用来移除集合中的数据. MongoDB数据更新可以使用update()函数.在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较 ...

  7. 百度地图JS 搜索悬浮窗功能

    这个需求的效果类似下面的截图,主要还是利用百度地图中自定义控件的功能,挺简单的.文档地址在这 http://lbsyun.baidu.com/index.php?title=jspopular 效果图 ...

  8. JDBC线程池创建与DBCP源码阅读

    创建数据库连接是一个比较消耗性能的操作,同时在并发量较大的情况下创建过多的连接对服务器形成巨大的压力.对于资源的频繁分配﹑释放所造成的问题,使用连接池技术是一种比较好的解决方式. 在Java中,连接池 ...

  9. [BBS]搭建开源论坛之JForum富文本编辑器更换

    本文作者:sushengmiyan  本文地址:http://blog.csdn.net/sushengmiyan/article/details/47866905 上一节我们将开发环境搭建完成,我们 ...

  10. Launcher3 HotSeat显示名称

    今天闲的无聊,研究了下launcher代码,看到Hotseat.java的时候,想起来以前有做过显示hotseat中应用名称,因为换了公司代码都没拿出来,就想在试着修改,看了很久发现无从下手,记得ho ...