常见字符串常量和表达式

s = '' #空字符串
s = "spam's" #双引号和单引号
s = 's\np\ta\x00m' #转义序列
s = """...""" #三重引号字符串块
s = r'\temp\spam' #Raw字符串
s = b'spam' #python3.0中的字节字符串
s = u'spam' #仅在python2.6中使用的unicode字符串
s1 + s2 #合并
s * 3 #重复
s[i] #索引
s [i:j] #分片
len(s) #求长度
"a %s parrot" % kind #字符串格式化表达式
"a {0} parrot".format(kind) #python2.6和python3.0的字符串格式方法
s.find('pa') #字符串方法:搜索
s.rstrip() #移除空格
s.replace('pa', 'xx') #替换
s.split(',') #用占位符分割
s.isdigit() #检查是否只由数字组成
s.lower() #转为小写
s.endswith('spam') #是否以制定后缀结尾
'spam'.join(strlist) #插入分割符
s.encode('latin-1') #unicode编码
for x in s: print(x) #迭代,成员关系
'spam' in s
[c * 2 for c in s]
map(ord, s)

字符串常量

单双引号字符串是一样的,而且python会自动在任意表达式中合并相邻的字符串常量。

title = "Meaning " 'of' " Life"
#'Meaning of Life'

用转义序列代表特殊字节

\newline #忽视(连续)
\\ #反斜杠
\' #单引号
\" #双引号
\a #响铃
\b #倒退
\f #换页
\n #换行
\r #返回
\t #水平制表符
\v #垂直制表符
\N #unicode数据库ID
\uhhhh #unicode 16位的十六进制值
\Uhhhhhhhh #unicode 32位的十六进制值
\xhh #十六进制值
\0xx #八进制值
\0 #Null
\other #不转义

一些转义字符允许一个字符串中嵌入绝对的二进制值。

s = 'a\0b\0c'
s
#'a\x00b\x00c'
len(s)
#5

注意,python以十六进制现实非打印的字符。

如果python找不到合法的转义编码,就会保留反斜杠。

raw字符串抑制转义

如果使用以下参数去打开文件就会出错:

myfile = open('C:\new\text.dat', 'w')

\n会被识别为一个换行字符,\t会被识别为一个制表符。如果在字符串第一个引号前面放一个字母r(大写或小写),它就会关闭转义机制。

myfile = open(r'C:\new\text.dat', 'w')

还有一种办法,用两个反斜杠来代表一个反斜杠。

myfile = open('C:\\new\\text.dat', 'w')

三重引号编写多行字符串块

如果希望一些行的代码不工作,之后再运行,可以简单在这几行前后加入三重引号。

x = 1
"""
import os
print(os.getcwd())
"""
y = 2

实际应用中的字符串

基本操作

字符串可以用+来合并,*来重复。

'abc' + 'def'
#'abcdef'

'NI!' * 5
#'NI!NI!NI!NI!NI!'

可以用for语句在字符串中循环迭代,in操作符可以对字符串进行搜索。

my = 'dsfdgdfg'
for c in my:
     print(c, end = ' ')
#d s f d g d f g

'd' in my
#True

'f' in my
#True

索引和分片

python可以通过索引来获取字符串中的字符,python的偏移量从0开始,并且还支持负偏移量,一个负偏移加上字符串的长度就等于正偏移,可以把负偏移看做从结束处反向计数。

s = 'spam'
s[0], s[-2]
#('s', 'a')

s[1:3], s[1:], s[:-1]
#('pa', 'pam', 'spa')

当使用分片时,左边的偏移作为下边界(下边界包含在内),右边的偏移作为上边界(不包含上边界在内)。python将获取从下边界开始直到不包含上边界的所有元素。如果省略,上下边界默认分别是0和对象的长度。

索引s[i]获取特定偏移的元素:

  • 第一个元素偏移为0
  • 负偏移意味着从最后或右边反向计数
  • s[0]获取第一个元素,s[-2]获取倒数第二个元素,就和s[len(s)-2]一样

分片s[i:j]提取对应部分作为一个序列:

  • 上边界并不包含在内
  • 分片的默认边界为0和序列的长度
  • s[1:3]获取了从偏移为1的元素到不包含偏移为3的元素
  • s[:]获取了偏移0到末尾之间的元素,有效实现顶层s拷贝

s[i:j]实现了一个完全的顶层的序列对象的拷贝,一个有相同值,但是不同内存片区的对象。但对于字符串这样不可变对象并不是很有用,但对于可以原地修改的对象却很实用,例如列表。

扩展分片:第三个限制值

分片的第三个索引,是步进。完整的分片为x[i:j:k],这表示“索引x对象中的元素,从偏移为i知道偏移为j-1,没隔k个元素索引一次”。k默认是1,如果定义了一个值,就会跳过某些元素或者反向排列顺序。

s = 'abcdefghijklmnop'
s[1:10:2]
#'bdfhj'
s[::2]
#'acegikmo'

如果使用负数作为步进,步进-1表示从右往左,实际效果就是将序列反向。

s = 'hello'
s[::-1]
'olleh'

字符串转换工具

int('42'), str(42)
#(42, '42')

repr(42)
#'42'

int()将字符串转换成数字,而str()将数字转换成字符串。repr()也可以转换对象为字符串。

repr()与str()的区别是,repr()返回的对象可以作为代码字符串,可以重新创建对象,也就是说obj = eval(repr(obj))是成立的。

字符串代码转换

单个字符可以传给ord()转换为对应的ASCII码。

ord('s')
#115

chr(115)
#'s'

下面的程序可以转换二进制数为十进制数:

b = '1101'
i = 0
while b != '':
    i = i * 2 + (ord(b[0]) - ord('0'))
    b =b[1:]
i
#13

修改字符串

字符串是不可变序列,所以想要原地修改字符串会报错,因此需要利用合并,分片这样的工具来处理然后赋值给一个新的字符串。也可以使用字符串格式化。

注意:

python3.0和2.6中引入了一种新字符串类型bytearray,它可以修改。bytearray并不是真正的字符串,它是较小的,8位整数序列。

字符串方法

 

posted @ 2017-08-10 01:23 hahazexia 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 变量,对象和引用 变量在赋值的时候创建,它可以引用任何类型的对象,并且必须在引用之前赋值。 所有赋值操作有三个步骤: 在运行a=3后,变量a变成对象3的一个引用,在内部,变量实际上是到对象内存空间的一个指针。 类型属于对象,而不是变量 变量名没有类型,我们只是把a修改为不同的对象的引用。因此,没有改 阅读全文
posted @ 2017-08-08 23:41 hahazexia 阅读(179) 评论(0) 推荐(0) 编辑
摘要: python的数字类型包括: 整数和浮点数 复数 固定精度的十进制数 有理分数 集合 布尔类型 无穷的整数精度 各种数字内置函数和模块 数字常量 如果一个数字带有小数点或者幂,python会将它变成浮点数。 python2.6中的整数分为一般整数(32位)和长整数(无穷精度)。如果一个整数以l或者L 阅读全文
posted @ 2017-07-31 22:52 hahazexia 阅读(509) 评论(0) 推荐(0) 编辑
摘要: eslint配置方式有两种: 有几种东西是可以配置的: 环境:你的脚本会在哪种环境下运行。每个环境带来了一组特定的预定义的全局变量。 全局变量:脚本运行期间会访问额外的全局变量。 规则:使用那些规则,并且规则的等级是多少。 我们这里使用配置文件.eslintrc.js来配置,它导出一个模块供ESLi 阅读全文
posted @ 2017-02-13 12:09 hahazexia 阅读(63197) 评论(2) 推荐(3) 编辑
摘要: 这里的文件负责配置swig模板引擎。 index.js json_file.js tag-static.js swig模板经过这一系列的配置是什么样的效果呢? 原来在gulp任务里通过gulp-rev-all-fixed的处理后,给所有的静态文件的文件名加上了哈希值,并且如果文件有变化,哈希值文件名 阅读全文
posted @ 2016-12-22 23:26 hahazexia 阅读(1260) 评论(0) 推荐(0) 编辑
摘要: 这里的文件的作用是负责设置env环境变量和日志。 index.js log4js.js base.js base.js、dev.js、prod.js、staging.js、test.js分别是不同环境下必须的环境变量,写法都一样。 阅读全文
posted @ 2016-12-22 23:20 hahazexia 阅读(4527) 评论(0) 推荐(0) 编辑
摘要: 这次来看一看gulp是怎么工作的。 tasks/paths.js paths.js文件里存放的是gulp任务中需要导入的文件的路径和导出的路径。 这样子把gulp任务用到的路径集中到一个文件里面好管理,也方便。 gulp任务的路径书写方式是依照node-glob的语法。 glob语法基本如下: *: 阅读全文
posted @ 2016-11-09 15:17 hahazexia 阅读(1781) 评论(0) 推荐(0) 编辑
摘要: 这一次整理的内容是项目主文件和如何启动项目。 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们可以知道,在项目目录下打开终端命令行,并且输入如下命令即可启动服务: 其中app.js是项目的主文件 阅读全文
posted @ 2016-11-03 18:49 hahazexia 阅读(5259) 评论(0) 推荐(2) 编辑
摘要: 环视是一种非捕获分组,它根据某个模式之前或之后的内容匹配其他模式。环视也称为零宽度断言。 环视包括: 正前瞻 反前瞻 正后顾 反后顾 正前瞻 假设要匹配单词ancyent,且要求紧跟的单词是marinere,可以使用正前瞻。 (?i)不区分大小写,所以现在就是在每一行中寻找后跟marinere的单词 阅读全文
posted @ 2016-11-02 19:50 hahazexia 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 将排列成直角三角形的数字粘贴到程序中。贪心,懒惰和占有量词本身是贪心的,贪心的量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再尝试,这个过程叫做回溯。它每次回退一个字符,知道找到匹配内容或者没有字符尝试为止。懒惰的意 阅读全文
posted @ 2016-10-26 18:47 hahazexia 阅读(6062) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示