Python 编程常见问题
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 编程常见问题的更多相关文章
- 测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
本文为霍格沃兹测试学院学员学习笔记. 本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如有错误的地方,欢迎 ...
- Python黑帽编程2.1 Python编程哲学
Python黑帽编程2.1 Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- Python编程核心之makeTextFile.py和readTextFile.py
引言: 最近大半年都在学习python编程,在双十一的时候购买了<Python编程核心>,看到makeTextFile.py和readTextFile.py两个例子有点错误,所以在这里给修 ...
- Python编程规范(PEP8)
Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- android编程常见问题-程序真机中不显示
新手编程常见问题: 问题表现:连接上手机后,程序不显示 解决版本:检查AndroidManifest.xml 文件中SDK版本的设置(要求要兼容当前手机版本系统),如下:
- android编程常见问题-程序在模拟器中不显示
新手编程常见问题: 问题表现:程序运行成功,但是在模拟器中不显示 解决办法:检查项目版本和模拟器版本是否匹配或兼容,如果不匹配,选择和模拟器版本一致 项目版本:右键-Properties-androi ...
- 学习Python编程的11个资源
用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程语言.如果你正打算学习 web 开发,Python 是一个不错的选择,甚至你想学游戏开发也可 以从 Python 开始,因 ...
随机推荐
- 算法导轮之B树的学习
最近学习了算法导轮里B树相关的知识,在此写一篇博客作为总结. 1.引言 B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树.B树类似于红黑树,但它与红黑树最大不同之处在于B树的节点可以拥有 ...
- SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了 ...
- 浅谈static其一之不死变量
在学习汇编的过程中,小有所悟,遂把自己所思所想记下,以便日后查阅. 首先说说我对这个关键字的理解.static字面上就是静止的.静态的.不变的之类的意思,所以在被它修饰之后,应该也会带有这样的一些特点 ...
- JS中的DOM— —节点以及操作
DOM操作在JS中可以说是非常常见了吧,很多网页的小功能的实现,比如一些元素的增删操作等都可以用JS来实现.那么在DOM中我们需要知道些什么才能完成一些功能的实现呢?今天这篇文章就先简单的带大家入一下 ...
- Django的配置文件(settings)
静态文件设置: 一.概述: #静态文件交由Web服务器处理,Django本身不处理静态文件.简单的处理逻辑如下(以nginx为例): # URI请求-----> 按照Web服务器里面的配置规则先 ...
- mysql和postgresql转义字符探究
总结 mysql依靠反斜杠\转义, postgresql 依靠单引号转义 mysql 客户端 mysql> create table usr (name varchar(), age integ ...
- 自定义View总结2
自定义控件: 1.组合控件:将系统原生控件组合起来,加上动画效果,形成一种特殊的UI效果 2.纯粹自定义控件:继承自系统的View,自己去实现view效果 优酷菜单: 1.系统原生的旋转和位置动画并没 ...
- 初识Spark2.0之Spark SQL
内存计算平台spark在今年6月份的时候正式发布了spark2.0,相比上一版本的spark1.6版本,在内存优化,数据组织,流计算等方面都做出了较大的改变,同时更加注重基于DataFrame数据组织 ...
- WebService案例入门(基础篇)
[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52106690 作者:朱培 ID:sdksdk0 邮 ...
- 一个貌似比较吊的递归转换为loop--总算成功了.
class Stack(object): """ A class to hold arguements and state data. """ ...