第二章 Python字符串和编码

2.1 字符串

    2.1.1 字符串转换

   >>> a = 123    
   >>> b = 1.23
   >>> type(a)
   <type ‘int‘>
   >>> type(b)
   <type ‘float‘>
   >>> type(str(a))
   <type ‘str‘>
   >>> type(str(b))
   <type ‘str‘>

说明:先定义个整数和浮点数,再查看类型,用str()函数将对象转成字符串。

这里的用到了type()函数,用于查看对象类型。这个type()在以后学习中很用的,刚开始学习时候,往往因为对象类型不对,导致程序运行报错,这时可以用它来排查问题。

   2.1.2 字符串连接

        # 加号字符将同类型字符连接到一起    
    >>> hw = "Hello" + "World!"
    >>> print hw
    HelloWorld!
    # 两个相邻的字符串自动连接一起
    >>> hw = "Hello""World!"
    >>> print hw
    HelloWorld!
    # 如果字符串内包括单引号或双引号,要用\转义,否则报错,上一章也讲过。
    >>> hw = "Hello \"World!\""
    >>> print hw
    Hello "World!"
    # 不同字符串类型拼接
    >>> a = "abc"
    >>> b = 1
    >>> print a + b
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: cannot concatenate ‘str‘ and ‘int‘ objects
    说明:不同字符串类型不允许连接,想要连接可以下面这么做。
    方法1:
    >>> c = "%s%d" %(a,b)
    >>> print c
    abc1
    方法2:
    >>> c = a + str(b)
    >>> print c
    abc1

   2.1.3 格式化输出


操作符号


说明


%s


字符串(str())


%r


字符串(repr())


%d


整数


%f


浮点数,可指定小数点后的精度

1) 字符串格式输出三种方法

    >>> xxoo = "string"    
    >>> print "%s" %xxoo
    string
    >>> print "%r" %xxoo
    ‘string‘
    >>> print `xxoo`   
    ‘string‘

说明:%s采用str()函数显示,%r采用repr()函数显示。repr()和反撇号把字符串转为Python表达式。

2) 保留小数点数

    >>> ‘%.1f‘ %(float(100)/1024)    
    ‘0.1‘

  2.1.4 字符串处理

上图是字符串处理的方法,红色框框中大概有一半经常用的,我们就拿一部分常用的来举例说明。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
xxoo = "Hello world!"
print "字符串长度: %s" % len(xxoo)
print "首字母大写: %s" % xxoo.capitalize()
print "字符l出现次数: %s" % xxoo.count(‘l‘)
print "感叹号是否结尾: %s" % xxoo.endswith(‘!‘)
print "w字符是否是开头: %s" % xxoo.startswith(‘w‘)
print "w字符索引位置: %s" % xxoo.find(‘w‘) # xxoo.index(‘W‘)
print "格式化字符串: Hello{0} world!".format(‘,‘)
print "是否都是小写: %s" % xxoo.islower()
print "是否都是大写: %s" % xxoo.isupper()
print "所有字母转为小写: %s" % xxoo.lower()
print "所有字母转为大写: %s" % xxoo.upper()
print "感叹号替换为句号: %s" % xxoo.replace(‘!‘,‘.‘)
print "以空格分隔切分成列表: %s" % xxoo.split(‘ ‘)
print "转换为一个列表: %s" % xxoo.splitlines()
print "去除两边空格: %s" % xxoo.strip()
print "大小写互换: %s" % xxoo.swapcase()
print "只要Hello字符串: %s" % xxoo[0:5]
print "去掉倒数第一个字符: %s" % xxoo[0:-1]

# python test.py
字符串长度: 12
首字母大写: Hello world!
字符l出现次数: 3
感叹号是否结尾: True
w字符是否是开头: False
w字符索引位置: 6
格式化字符串: Hello, world!
是否都是小写: False
是否都是大写: False
所有字母转为小写: hello world!
所有字母转为大写: HELLO WORLD!
感叹号替换为句号: Hello world.
以空格分隔切分成列表: [‘Hello‘, ‘world!‘]
转换为一个列表: [‘Hello world!‘]
去除两边空格: Hello world!
大小写互换: hELLO WORLD!
只要Hello字符串: Hello
去掉倒数第一个字符: Hello world


博客地址:http://lizhenliang.blog.51cto.com


2.2 编码

    2.2.1 常见字符编码类型

ASCII:美国信息交换标准码,是目前计算机中最广泛使用的字符集编码。每个ASCII码以1个字节存储,例如数字字符0的ASCII码是0110000,十进制表示为48。

       Unicode:为解决世界上上百种语言带来混合、冲突,各国有各国的标准,显示很容易出现乱码。Unicode就出现了,它把所有语言的字符都统一到一套Unicode编码中,并定义每个语言字符的标准,所以Unicode又称统一码,万国码。大部分编程语言都支持Unicode,Python内部编码也支持Unicode。

GB2312:中国国家标准总局发布处理汉字的标准编码。

GBK:GB2312的扩展,向下兼容GB2312。

UTF-8:针对Unicode的可变长度字符编码,又称万国码。支持中文简体繁体及其它语言(如英文,日文,韩文)。

     2.2.3 decode()

decode()函数作用是将其他编码(比如ACSII、Byte String)的字符串解码成Unicode。

     2.2.4 encode()

encode()函数作用是将Unicode编码成终端软件能是识别的编码,就能正常显示了,比如UTF-8、GBK。

     2.2.5 Python编码处理

    #!/usr/bin/env python        
    c = "中文"
    print c
        
    # python test.py
      File "test.py", line 2
    SyntaxError: Non-ASCII character ‘\xe4‘ in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

说明:在程序里面直接打印中文,会报语法错误,这是因为Python默认编码是ASCII,无法处理其他编码。

如果想打印中文,需要声明编码为utf-8,上面也有写过:

    #!/usr/bin/env python        
     # -*- coding: utf-8 -*-
    c = "中文"
    print c
    print type(c)
        
    # python test.py
    中文
    <type ‘str‘>

可以正常输出中文了,类型是字符串,这个字符串是经过Python unicode编码后字节组成的。

虽然可以正常输入中文,并不意味的就万事大吉了,如果终端编码不是utf-8或其他软件也不确定编码还会出现乱码情况。所以还是要明白Python处理编码逻辑关系,才能更好的应对编码问题。

切换到交互式解释器:

    >>> c = "中文"        
    >>> c.encode(‘utf-8‘)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128)

如果直接转成utf-8是不允许的,报错Unicode解码错误,大概意思是说ascii码不能解码字节字符串。

上面讲到encode()函数作用是将Unicode码解码,而现在的c变量并非是Unicode码,而是字节字符串,算是Unicode的一种吧?。

故此,不能使用encode(),而是先使用decode()先解码陈Unicode再用encode()编码成utf-8。

    >>> c.decode(‘utf-8‘)        
    u‘\u4e2d\u6587‘       # 4e2d对应unicode值是"中",6587对应unicdoe值是"文"
    >>> type(c.decode(‘utf-8‘))
     <type ‘unicode‘>
    >>> print c.decode(‘utf-8‘)    ?
    中文
    >>> print c.decode(‘utf-8‘).encode(‘utf-8‘)
    中文

如果是Unicode字符串可直接通过encode()函数转码其他编码。

        >>> c = u‘中文‘    
    >>> c.encode(‘utf-8‘)
    ‘\xe4\xb8\xad\xe6\x96\x87‘
    >>> print c.encode(‘utf-8‘)
    中文

看下字节字符串和unicode字符串区别:

    >>> c = ‘中文‘        
    >>> u = u‘中文‘
    >>> c
      ‘\xe4\xb8\xad\xe6\x96\x87‘
    >>> u
     u‘\u4e2d\u6587‘
    >>> len(c)
      6
    >>> len(u)
      2

字节字符串长度要比unicode长的多,而unicode长度就是字符长度。

总结下:Python处理编码流程大致是这样的,ascii --> decode() --> unicode --> encode() --> 终端能识别的编码,unicode算是一个中间码,有着承上启下的作用。

时间: 2024-08-09 04:47:42

第二章 Python字符串和编码的相关文章

第二章Python入门

第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码.为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容, 2.1.1.Python适合开发哪些类型的应用呢? 云计算 机器学习 科学运算 自动化运维 自动化测试 爬虫 数据分析 GUI图形化 Web开发等 2.1.2.P

[Head First Python] - 第二章 python of comment

1- 多行注释 ''' ''' 或 """ """ '''this is the standard way to include a multiple-line comment in you code''' """this is the standard way to include a multiple-line comment in you code""" 2- 单行注释 # # t

python 第二章 二进制运算、字符编码、数据类型

>>> len(s.ljust(50,'*'))50>>> 1.二进制转换: bin(342) '0b101010110' 2.ASCII码与二进制: 每一个ASCII码都是用8位表示,ASCII码一共有255个.每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位,8位表示一个字节. 8bit = 1bytes(字节),最小的存储单位,1bytes缩写为1B 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1

第二章 Python基本元素:数字、字符串和变量

Python有哪些内置的数据类型: True False #布尔型 42 100000000 #整型 3.14159 1.0e8 #浮点型 abcdes #字符串 2.1 变量.名字和对象 python中统一的形式是什么?  对象,所有的对象都是以对象的形式存在. 如何知道一个对象的类型?  type()语句 2.2 数字 整型和浮点型的除法分别是什么? >>> 3/2 1.5 >>> 3//2 1 如何同时得到余数和商? >>> divmod(5,2

第二章 Python基础知识

第1章 第一个Pyhton程序 Pyhton的两种执行方式:交互式与脚本文件 1.1 交互式 l  交互式模式 直接在Windows或者Linux环境下打开Python解释器执行. 优点:快捷,调试方便. 缺点:不能够保存代码. C:\Users\cc>python3 Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", &quo

python字符串和编码

字符编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,最早只有127个字母被编码

第二章 Python入门

第一章计算机基础的部分,以后整理完后更新. 2.1 环境安装 学习python需要的环境(mac/windows): 解释器:py2\py3 开发工具:pycharm 2.2 编码 2.2.1 编码基础 常见编码: ascii (英语) unicode (内存中使用的编码,可以支持世界上任何语言符号.又称:万国码.由联合国组织定义) cse2 (以前常用的编码形式) cse4 (常用的编码形式) gbk (中文编码的一种,现在广泛被使用) gb2312 (中文编码的一种,比较旧的编码) utf

第二章 python数据类型

第一节    数字和字符串类型 123和“123”一样吗 () [] {} 计算机是用来辅助人们的,在程序设计中也映射了现实世界的分类,以便于抽象的分析. 数字 字符串 列表 元组 字典 我们通过数据类型去查看一些简单的数据类型,python会自动识别数据的类型 >>> num1=123 >>> type(123) <type 'int'> >>> type(num1) <type 'int'> >>> num

Python字符串的编码与解码(encode与decode)

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码.