Python | 脚本学习

python

python 字符串使用总结

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]

本文链接: http://www.leexiang.info/archives/294

python 文件和目录操作

1.获得当前路径

在Python中可以使用os.getcwd()函数获得当前的路径。其原型如下所示。

os.getcwd()
该函数不需要传递参数,它返回当前的目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。例如,在PythonWin中输入如下脚本。
More >

python logging模块介绍

简介-Python文档
从Python2.3版本中开始引入的logging模块为应用提供了灵活的日志系统。

logging的行为依靠调用 Logger 类的方法来实现,实例一般叫做logger。每个实例都拥有自己的名字,并且可以通过点来分割具备层次的名字。例如,一个logger叫做”scan”是一个叫做”scan.text”的logger的顶层,当然也包括”scan.html”和”scan.pdf”。logger的名字指示了他属于应用程序的哪个位置。
More >

python中使用中文

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的区别

以下在python2.5和PyQt4.4.6 for python2.5环境下讨论。

1.在python中有两种与字符有关的类型:string object和Unicode object。

    平时进行输入输出的一般都用string object,当需要显示一些特殊字符或者中文等文字时候,需要转换为Unicode编码。在PyQt中也有两种字符类型与上面两者对应:QByteArray和QString,主要是使用QString操作数据。
More >

随机生成中文验证码的python代码

# -*- 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 数组初始化

初始化一维数组,我们可以这样做:

one-array = [0] * 5

没错,那我们初始化一个二维数组时,是否可以这样做呢:

multi = [[0] * 5] * 3

其实,这样做是不对的,因为[0] * 5是一个一维数组的对象,* 3的话只是把对象的引用复制了3次,比如,我修改mult[0][0]:

mult = [[0] * 5] * 3
mult[0][0] = 'Hello world'
print mult

输出的结果将是:
[['Hello world', 0, 0, 0, 0], ['Hello world', 0, 0, 0, 0], ['Hello world', 0, 0, 0, 0]]

我们修改了mult[0][0],却把我们的mult[1][0],mult[2][0]也修改了。这不是我们想要的结果。
如果我们这样写呢:

mult-array = [[0] * 5 for row in range(3)]
mult-array[0][0] = 'Hello world'
print mult-array

我们看输出结果:
[['Hello world', 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

恩,没问题。但是,由于使用 * 的方法比较容易引起混淆导致Bug,所以还是推荐使用下面方法:

mult-array = [[0 for col in range(5)] for row in range(3)]

python与xml之解析篇

转载自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 常用文件系统函数

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 连接字符串举例

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']

google reader 哪吒
QQ邮箱 my yahoo
抓虾 鲜果