python
python 字符串使用总结
三 22nd
1.python 字符串通常有单引号(’…’)、双引号(”…”)、三引号(”"”…”"”)或(”’…”’)包围,三引 号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号(”"”…”"”)中可以包含单引号,三引号 (”’…”’)可以包含双引号,而不需要转义。
2.用(\)对特殊字符转义,如(\)、(’)、(”)。
3.常用字符串函数
(1) str.count() //返回该字符串中某个子串出现的次数
(2) str.find() //返回某个子串出现在该字符串的起始位置
(3) str.lower() //将该字符串全部转化为小写
(4) str.upper() //转为大写
(5) str.split() //分割字符串,返回字串串列表,默认以空格分割
(6) len(str) //返回字符串长度
例如:
>>> str = ‘Hello, world’
>>> str.count(‘o’)
>>> 2
>>> str.find(‘lo’)
>>> 3
>>> str.lower()
>>> ‘hello, world’
>>> str.upper()
>>> ‘HELLO, WORLD’
>>> str.split()
>>> ['Hello,', 'world']
>>> str.split(‘,’)
>>> ['Hello', ' world']
>>> len(str)
>>> 13
>>> str
>>> ‘Hello, world’
以上所有操作都不会改变字符串本身!
4.字符串与数字相互转换
import string
string.atoi(str[,base]) //base为可选参数,表示将字符转换成的进制类型
数字转换成字符串可简单了,直接用str()
5.字符与ASCII转换
char->ascii ord()
ascii->char chr()
Python字符串操作
1.复制字符串
#strcpy(sStr1,sStr2)
sStr1 = ’strcpy’
sStr2 = sStr1
sStr1 = ’strcpy2′
print sStr2
2.连接字符串
#strcat(sStr1,sStr2)
sStr1 = ’strcat’
sStr2 = ‘append’
sStr1 += sStr2
print sStr1
3.查找字符
#strchr(sStr1,sStr2)
sStr1 = ’strchr’
sStr2 = ‘r’
nPos = sStr1.index(sStr2)
print nPos
4.比较字符串
#strcmp(sStr1,sStr2)
sStr1 = ’strchr’
sStr2 = ’strch’
print cmp(sStr1,sStr2)
5.扫描字符串是否包含指定的字符
#strspn(sStr1,sStr2)
sStr1 = ‘12345678′
sStr2 = ‘456′
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)
6.字符串长度
#strlen(sStr1)
sStr1 = ’strlen’
print len(sStr1)
7.将字符串中的小写字符转换为大写字符
#strlwr(sStr1)
sStr1 = ‘JCstrlwr’
sStr1 = sStr1.upper()
print sStr1
8.追加指定长度的字符串
#strncat(sStr1,sStr2,n)
sStr1 = ‘12345′
sStr2 = ‘abcdef’
n = 3
sStr1 += sStr2[0:n]
print sStr1
9.字符串指定长度比较
#strncmp(sStr1,sStr2,n)
sStr1 = ‘12345′
sStr2 = ‘123bc’
n = 3
print cmp(sStr1[0:n],sStr2[0:n])
10.复制指定长度的字符
#strncpy(sStr1,sStr2,n)
sStr1 = ”
sStr2 = ‘12345′
n = 3
sStr1 = sStr2[0:n]
print sStr1
11.字符串比较,不区分大小写
#stricmp(sStr1,sStr2)
sStr1 = ‘abcefg’
sStr2 = ‘ABCEFG’
print cmp(sStr1.upper(),sStr2.upper())
12.将字符串前n个字符替换为指定的字符
#strnset(sStr1,ch,n)
sStr1 = ‘12345′
ch = ‘r’
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1
13.扫描字符串
#strpbrk(sStr1,sStr2)
sStr1 = ‘cekjgdklab’
sStr2 = ‘gka’
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print nPos
14.翻转字符串
#strrev(sStr1)
sStr1 = ‘abcdefg’
sStr1 = sStr1[::-1]
print sStr1
15.查找字符串
#strstr(sStr1,sStr2)
sStr1 = ‘abcdefg’
sStr2 = ‘cde’
print sStr1.find(sStr2)
16.分割字符串
#strtok(sStr1,sStr2)
sStr1 = ‘ab,cde,fgh,ijk’
sStr2 = ‘,’
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1
转载自:缥缈的云[http://www.leexiang.info]
python 文件和目录操作
三 21st
1.获得当前路径
在Python中可以使用os.getcwd()函数获得当前的路径。其原型如下所示。
os.getcwd()
该函数不需要传递参数,它返回当前的目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。例如,在PythonWin中输入如下脚本。
More >
python logging模块介绍
三 20th
简介-Python文档
从Python2.3版本中开始引入的logging模块为应用提供了灵活的日志系统。
logging的行为依靠调用 Logger 类的方法来实现,实例一般叫做logger。每个实例都拥有自己的名字,并且可以通过点来分割具备层次的名字。例如,一个logger叫做”scan”是一个叫做”scan.text”的logger的顶层,当然也包括”scan.html”和”scan.pdf”。logger的名字指示了他属于应用程序的哪个位置。
More >
python中使用中文
三 20th
python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。
先来看看python的版本:
import sys sys.version '2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]'
(一)
用记事本创建一个文件ChineseTest.py,默认ANSI:
More >
python String和PyQt QString的区别
三 20th
以下在python2.5和PyQt4.4.6 for python2.5环境下讨论。
1.在python中有两种与字符有关的类型:string object和Unicode object。
平时进行输入输出的一般都用string object,当需要显示一些特殊字符或者中文等文字时候,需要转换为Unicode编码。在PyQt中也有两种字符类型与上面两者对应:QByteArray和QString,主要是使用QString操作数据。
More >
随机生成中文验证码的python代码
三 20th
# -*- coding: utf-8 -*-
import Image,ImageDraw,ImageFont
import random
import math, string
class RandomChar():
"""用于随机生成汉字"""
@staticmethod
def Unicode():
val = random.randint(0x4E00, 0x9FBF)
return unichr(val)
@staticmethod
def GB2312():
head = random.randint(0xB0, 0xCF)
body = random.randint(0xA, 0xF)
tail = random.randint(0, 0xF)
val = ( head << 8 ) | (body << 4) | tail
str = "%x" % val
return str.decode('hex').decode('gb2312')
class ImageChar():
def __init__(self, fontColor = (0, 0, 0),
size = (100, 40),
fontPath = 'wqy.ttc',
bgColor = (255, 255, 255),
fontSize = 20):
self.size = size
self.fontPath = fontPath
self.bgColor = bgColor
self.fontSize = fontSize
self.fontColor = fontColor
self.font = ImageFont.truetype(self.fontPath, self.fontSize)
self.image = Image.new('RGB', size, bgColor)
def rotate(self):
self.image.rotate(random.randint(0, 30), expand=0)
def drawText(self, pos, txt, fill):
draw = ImageDraw.Draw(self.image)
draw.text(pos, txt, font=self.font, fill=fill)
del draw
def randRGB(self):
return (random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255))
def randPoint(self):
(width, height) = self.size
return (random.randint(0, width), random.randint(0, height))
def randLine(self, num):
draw = ImageDraw.Draw(self.image)
for i in range(0, num):
draw.line([self.randPoint(), self.randPoint()], self.randRGB())
del draw
def randChinese(self, num):
gap = 5
start = 0
for i in range(0, num):
char = RandomChar().GB2312()
x = start + self.fontSize * i + random.randint(0, gap) + gap * i
self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())
self.rotate()
self.randLine(18)
def save(self, path):
self.image.save(path)
调用方法:
ic = ImageChar(fontColor=(100,211, 90))
ic.randChinese(4)
ic.save("1.jpeg")
效果图:
![]()
来源:http://www.3gcnbeta.com/wordpress/
python与xml之解析篇
二 26th
转载自http://blog.csdn.net/porcupinefinal
网上关于xml文件解析的例子多如牛毛,用python解析的也不少,在百度输入python xml就会出来不少结果。我也是从这些例子和文章中学的,所以会有类似的地方,当然我也会加入自己的一些体会。
《dive into python》第五章对这一部分有较详尽的讲解。
下边开始我们的xml解析之旅:
处理xml有两种方法:
FIRST:SAX—Simple API for XML。它的工作方式是,一次读出一点XML,对发现的每个元素调用一个方法。SAX是 XML 语法分析器的公用语法分析器接口。它允许应用程序作者编写使用 XML 语法分析器的应用程序,但是它却独立于所使用的语法分析器。(将它看作 XML 的 JDBC。)(Lars Marius Garshol,SAX for Python)
功能:基本上是一个 XML 文档的顺序处理器。应用程序员将定义一个 handler 类,而不是语法分析器类,该 handler 类能注册到任何所使用的语法分析器中。必须定义 4 个 SAX 接口(每个接口都有几个方法):DocumentHandler、DTDHandler、EntityResolver 和 ErrorHandler。创建语法分析器除非被覆盖,否则它还连接默认接口。
SECOND:DOM—Document Object Model。它的工作方式是,一次读出整个XML文档,通过将本地的Python类链接到一个树型结构中,生成文档的一个内部表示。
这篇文章里我主要用的是SAX这种方法(在dive into python一书中用的是DOM这种方式,我将在下一篇文章python与xml之更新篇中用这种方法举例如何增加、更新及删除xml文件中的某个节点。)我之所以选择这种方法是因为关于用DOM来解析xml的文章实在太多,没有什么从新写的必要,网上也有人说用DOM解析较大的xml文件时效率较低的问题(自己没有测试过,有人说是5M的文件要解析20分钟。。。是够慢的),所以我选择了用SAX来解析xml。
示例:(该示例转载自ibm上可爱的python系列)
import string
import xml.sax
from xml.sax.handler import *
classQuotationHandler(ContentHandler):
"""Crude extractor for quotations.dtd compliant XML document"""
def __init__(self):
self.in_quote = 0
self.thisquote = ''
def startDocument(self):
print '--- Begin Document ---'
def startElement(self, name, attrs):
if name == 'quotation':
print 'QUOTATION:'
self.in_quote = 1
else:
self.thisquote = self.thisquote + '{'
def endElement(self, name):
if name == 'quotation':
print string.join(string.split(self.thisquote[:230]))+'...',
print '('+str(len(self.thisquote))+' bytes)\n'
self.thisquote = ''
self.in_quote = 0
else:
self.thisquote = self.thisquote + '}'
def characters(self, ch):
if self.in_quote:
self.thisquote = self.thisquote + ch
if __name__ == '__main__':
parser = xml.sax.make_parser()
handler = QuotationHandler()
parser.setContentHandler(handler)
parser.parse("sample.xml"
要点:
1、 注意黑体加粗部分,首先继承ContentHandler,构造自己的handler;
2、 剩下的startElement、endElement、characters三个接口必须实现,startElement和endElement主要用于解析形如<school>北理</school>的结构,当处理器进入<school>时将in_quote置为1,在characters中将“北理”这个值赋于self.thisquote然后在endElement中可通过self.thisquote获得“北理”这一值;
3、 形如<class id=”09120016” />或<class id=”09120016”></class>的解析在startElement中进行,通过attrsattrs.get(‘id’, None)获得“09120016”这一值。(在这个示例里没有,如有不明白的可以发email给我porcupine2004@126.com);
4、 parse() 方法处理整个流或字符串,所以不必为语法分析器创建循环;
5、 parse() 同样能灵活地接收一个文件名、一个文件对象,或是众多的类文件对象(一些具有 .read() 方式);
python 常用文件系统函数
二 26th
1: os.walk(path)
遍历path,返回一个对象,他的每个部分都是一个三元组
(‘目录x’,[目录x下的目录list],目录x下面的文件)
举例:
a = os.walk('.')
for i in a:
print i
2: os.path.dirname(path)
More >
python 连接字符串举例
二 26th
join 方法用于连接字符串数组,使用 % 连接多个变量下面看例子:
join 方法用于连接字符串数组:
s = ['a', 'b', 'c', 'd'] print ''.join(s) print '-'.join(s)
输出结果:
abcd
a-b-c-d
使用 % 连接多个变量:
s = ['a', 'b', 'c', 'd'] a = 'hello' b = 'python' c = 1 print '%s %s %s %s' % (a, b, c, s)
输出结果:
hello python 1 ['a', 'b', 'c', 'd']