概述
### 什么是文本
文本是一串字符,二进制数据一串字节
基本的文本操作
总的来说,有三种基本的文本操作:
- 解析数据并将数据放入程序内部的结构中
- 将数据以某种形式转换为另一种相似的形式,数据本身发生了改变
- 生成全新的数据
字符串基础
Python提供的用于文本处理的最主要的工具就是字符串–不可改变的字符序列。实际上存在两种字符串:
- 普通字符串:包含了8位ASCII字符,有256个不同的字符。
- Unicode字符串:包含了Unicode字符,Unicode字符串的处理方式和普通字符串类似,只不过它们每个字符占用2(或者4)个字节,所以它们拥有成千上万甚至上亿个字符。
在Python中,用下列方式可以表示一个文本字符串:
'This is a string'
"This is another string"
字符串的值被双引号或单引号圈起,这两种表示法在程序中完全一样,都允许你在字符串内部引用引号:
'Isn\'t that grand'
"Isn't that grand"
为了让文本字符串扩展到多行,可以在一行末尾使用反斜杠符号,意味着下一行仍是上面字符串的延续:
big = "This is a long\
string that spans two lines"
如果想让字符串的输出分为两行,可以在字符串中嵌入换行符:
big = "This is a long\n\
string that spans two lines"
还有一种方式是用一对连续的三引用符将字符串圈起来:
bigger = """
This is a
string that
spans two lines
"""
使用上述的三引用符无需加入续行符和换行符,文本将按照原貌被储存
在Python的字符串对象中,也可以在字符串前面加一个r或R,表示该字符串是一个真正的”原”字符串,需要它的原貌:
big = r"This is a long\n\
string that spans two lines"
使用原字符串,反斜线转义和换行符完全被忽略。还可以在字符串前面加一个U或u使之成为一个Unicode字符串:
hello = u"hello\u0020World"
字符串是无法改变的,意味着无论你对它进行什么操作,你总是创建了一个新的字符串对象,而不是改变了原有字符串。字符串是字符的序列,所以可以通过索引的方法访问单个字符:
myStr = "my string"
myStr[0] #m
myStr[-2] #n
也可以用切片的方式访问字符串的一部分:
myStr[1:4] #y s
myStr[3:] #string
myStr[-3:] #ing
切片还能增加第三个参数,作为切片的步长
myStr[:3:-1] #gnirt
myStr[1::2] #ysrn
可以通过循环遍历字符串:
for c in myStr
注:不能试图改变字符串序列,字符串不能改变
文件
读取文件
循环
可以使用下列语句逐行对文件对象进行处理:
for line in fileName:
process(line)
对于二进制数据,行是一个没有意义的函数,所以可以使用read()函数读取二进制文件。当read()不传入参数时,read会读取并返回文件中所有的剩余字节
一次性读取文件
一次性读取文件放入一个大字符串中:
all_the_text = open('fileName.txt').read() #文本文件所有文本
all_the_data = open('fileName','rb').read() #二进制文件所有数据
为了安全起见,最好还是给打开的文件对象指定一个名字,这样可以保证在完成操作后迅速关闭文件,防止一些无用的文件对象占用内存:
file_object = open('fileName.txt')
try:
all_the_text = file_object.read
finally