您的位置:首页 > 编程语言 > Python开发

python一些基本知识点之字符串(一)

2014-06-03 16:53 477 查看
前言:在老师的威逼下,我决定开始学习python,说实话不是很情愿,主要是觉得c++都还灭有学明白呢,我一直的观点是语言在精,不再多,所以我还是想把精力放在C++语言的学习上。但是由于形式所迫,我也想锻炼一下自己学习新知识的效果,还有就是Python确实不错。而且在有生之年,能掌握一种脚本语言也是不错的,况且Python据说很强大,看了几本书的前沿,都说了若干多Python的好处。而且搞图像处理,据说Python还是很有用的。

不找任何借口了,学学吧,顺便坐下笔记在此。希望自己能坚持下来.

以下的知识点均来自与Python学习手册这本书,主要是做笔记功能。

1、在dos命令下,将.py文件保存成.txt文件:python scr.py > save.txt 这样就将,py中的输出结果保存到了.txt中

2、import导入一个模块只能导入一次,也只有导入的第一次起作用,如果想要重新导入,需要用到imp标准库模块中可用的reload函数

例如:

>>> import script
>>> from imp import reload
>>> reload(script)
win32
1267650600228229401496703205376
spam spam spam spam spam spam spam spam 
<module 'script' from 'C:/Python27/py_test\script.pyc'>
>>>
3、dir函数,treename为文件名

>>> dir(treename)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'c']
a,b,c是treename文件中定义的三个变量,而剩下的变量是Python预定义的内置变量名

4、Python程序可以分解成模块、语句、表达式、以及对象,如下所示。

(1)程序由模块构成

(2)模块包含语句

(3)语句包含表达式

(4)表达式建立并处理对象

4、一些数学模块演示:

import math
import random
print(math.pi)
print(math.sqrt(85))
print(random.random())
print(random.choice([1,2,3,4,5,6,7,8,9]))
5、字符串

正索引和反索引:

>>> S = 'spam'
>>> len(S)
4
>>> S[0]
's'
>>> S[1]
'p'
>>> S[-1]
'm'
>>> S[-2]
'a'


序列支持的一些分片的操作:

>>> S
'spam'
>>> S[0:]
'spam'
>>> S[0:3]
'spa'
>>> S[:3]
'spa'
>>> S[:-1] #除了最后一个的所有的都输出
'spa'
>>> S[:]
'spam'
>>>
不可以通过对字符串中某一位置进行赋值而改变字符串,但是你总是可以建立一个新的字符串并以同一个变量名对其进行赋值。因为Python在运行过程中会清理旧的对象

例:

>>> S
'spam'
>>> S[0]= 'z'

Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    S[0]= 'z'
TypeError: 'str' object does not support item assignment
>>> S = 'z' + S[1:]
>>> S
'zpam'
以上每一个字符串的操作都是一个真正的序列操作,也就是说这些操作在其他序列中也会工作,包括列表和元组。

除了一般的序列操作,字符串还有独有的一些操作作为方法存在:

find方法:字符串查找操作

replace方法:对全局进行搜索和替换

>>> S.find('pa')#找到返回1
1
>>> S.find('ls')#没找到返回-1
-1
>>> S.replace('pa','XYZ')
'zXYZm'
>>> S
'zpam' #原字符串的值,并没有改变
>>>
其他方法:

>>> line = 'aaa,bbb,ccc,ddd'
>>> line.split(',')
['aaa', 'bbb', 'ccc', 'ddd']
>>> for x in line.split(','):
	print(x)

	
aaa
bbb
ccc
ddd
>>> S = 'spam'
>>> S.upper()
'SPAM'
>>> S.isalpha()
True
>>> line = 'a,bb,ccc,dddd\n'
>>> line = line.rstrip() #去掉右边的空格
>>> line
'a,bb,ccc,dddd'
>>> a = 'aaaa\n'
>>> a
'aaaa\n'
格式化:

>>> '{0}, eggs, and {1}'.format('spam','SPAM!')
'spam, eggs, and SPAM!'
>>> '%s, eggs, and %s' %('spam','SPAM!')
'spam, eggs, and SPAM!'
调用内置的dir函数将会返回一个列表,其中包含了对象的所有属性。由于方法是函数属性,也会在这个列表中出现。

加入S是一个字符串;

>>> dir(S)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
dir函数给出了方法的名称,要查询他们是做什么的,你可以将其传递给help函数

>>> help(S.replace)
Help on built-in function replace:

replace(...)
    S.replace(old, new[, count]) -> string
    
    Return a copy of string S with all occurrences of substring
    old replaced by new.  If the optional argument count is
    given, only the first count occurrences are replaced.
例:

>>> S
'spam'
>>> S.replace('sp','LSP')
'LSPam'


模式匹配:

>>> import re
>>> m = re.match('Hello[ \t]*(.*)World','Hello    	Python World')
>>> if m:
	m.group(1)

	
'Python '
这个例子的目的是搜索子字符串,这个字符串以Hello开始,后面跟着零个或几个制表符或空格,接着有任意字符并将其保存至匹配的group中最后以World结尾。

注意:如果没有if语句对m进行判断其是否为None,会报

Traceback (most recent call last):

File "<pyshell#168>", line 1, in <module>

m.groups()

AttributeError: 'NoneType' object has no attribute 'groups'

这种错误。

解决办法及其原因请参考:

1. 通过re.compile生成正则表达式对象

2. 调用正则表达式对象的match或者search方法生成match或search对象

3. 判断match或search对象对否为None,如果不为None,通过group方法获取分组匹配字符串。

注意: 如果不做判断的话,当匹配失败调用group方法会报异常(AttributeError: 'NoneType' object has no attribute 'group')退出。
类似的例子:
[b]>>> import re

[/b]

>>> match = re.match('/(.*)/(.*)/(.*)','/user/home/people')

>>> if match:

match.groups()

输出:('user', 'home', 'people')

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: