第二章 Python字符串处理和编码不再发愁

简介:

2.1 字符串

2.1.1 字符串转换

1
2
3
4
5
6
7
8
9
10
>>> 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 字符串连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 加号字符将同类型字符连接到一起    
>>> hw  =  "Hello"  +  "World!"
>>>  print  hw
HelloWorld!
# 两个相邻的字符串自动连接一起
>>> hw  =  "Hello" "World!"
>>>  print  hw
HelloWorld!
# 如果字符串内包括单引号或双引号,要用\转义,否则报错,上一章也讲过。
>>> hw  =  "Hello \"World!\""
>>>  print  hw
Hello  "World!"
# 不同字符串类型拼接
>>> a  =  "abc"
>>> b  =  1
>>>  print  +  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  =  +  str (b)
>>>  print  c
abc1

2.1.3 格式化输出

操作符号

说明

%s

字符串(str())

%r

字符串(repr())

%d

整数

%f

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

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

1
2
3
4
5
6
7
>>> xxoo  =  "string"    
>>>  print  "%s"  % xxoo
string
>>>  print  "%r"  % xxoo
'string'
>>>  print  `xxoo`   
'string'

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

2) 保留小数点数

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

2.1.4 字符串处理

 wKioL1fUsVnRU35PAAChUcGSy1Y556.png-wh_50

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/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

2.1.5 字符串输出颜色

字体颜色

字体背景颜色

显示方式

30:黑

31:红

32:绿

33:黄

34:蓝色

35:紫色

36:深绿

37:白色

40:黑

41:深红

42:绿

43:黄色

44:蓝色

45:紫色

46:深绿

47:白色

0:终端默认设置

1:高亮显示

4:下划线

5:闪烁

7:反白显示

8:隐藏

格式:

\033[1;31;40m  # 1是显示方式,可选。31是字体颜色。40m是字体背景颜色。

\033[0m     # 恢复终端默认颜色,即取消颜色设置。

wKioL1fenUOAvFGqAAC3Uy3FuZk327.png

wKiom1fenVng_T7yAACUWawoUEc068.png


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

QQ群:Shell/Python运维开发群 323779636


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编码处理

1
2
3
4
5
6
7
#!/usr/bin/env python        
=  "中文"
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,上面也有写过:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python        
# -*- coding: utf-8 -*-
c =  "中文"
print c
print  type (c)
         
# python test.py
中文
< type  'str' >

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

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

切换到交互式解释器:

1
2
3
4
5
>>> 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。

1
2
3
4
5
6
7
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()函数转码其他编码。

1
2
3
4
5
>>> c  =  u '中文'    
>>> c.encode( 'utf-8' )
'\xe4\xb8\xad\xe6\x96\x87'
>>>  print  c.encode( 'utf-8' )
中文

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

1
2
3
4
5
6
7
8
9
10
>>> 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算是一个中间码,有着承上启下的作用。



本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1851539,如需转载请自行联系原作者

相关文章
|
1月前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
54 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
2月前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
99 36
|
1月前
|
自然语言处理 Java 数据处理
【速收藏】python字符串操作,你会几个?
【速收藏】python字符串操作,你会几个?
56 7
|
1月前
|
索引 Python
Python 高级编程:深入探索字符串切片
在Python中,字符串切片功能强大,可灵活提取特定部分。本文详细介绍切片技巧:基本切片、省略起始或结束索引、使用负数索引、设定步长及反转字符串等。此外,还介绍了如何结合其他操作进行切片处理,如先转换大小写再提取子串。 来源:https://www.wodianping.com/yeyou/2024-10/48238.html
38 4
|
2月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
134 6
|
2月前
|
网络协议 网络安全 开发者
Python 向IP地址发送字符串
Python 向IP地址发送字符串
|
2月前
|
Python
Python 中取字符串中等于号后面的内容
Python 中取字符串中等于号后面的内容在编程过程中,我们经常需要从字符串中提取特定的信息。一个常见的任务是在给定的字符串中查找等于号(=)后面的内容。这种需求在解析配置文件、处理查询字符串或分析日志数据时尤其常见。 如何实现 在Python中,我们可以使用多种方法来实现此功能。以下是几种常用的方法,包括字符串操作和正则表达式。 方法 1:使用字符串分割 我们可以使用字符串的 split() 方法将字符串拆分为两个部分,然后提取等于号后的值。 示例代码 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者bruce_xiao
|
2月前
|
Python
Python 中如何指定 open 编码为ANSI
Python 中如何指定 open 编码为ANSI
|
1月前
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
32 0
|
1月前
|
Python
Python操作:字符串--列表--元组--字典--运算符 (一)
Python操作:字符串--列表--元组--字典--运算符 (一)
下一篇
无影云桌面