Loading

Python 中的字符串处理详解(原始字符串、分割、转码等)

字符串

Python 中没有单独的字符类型,字符串属于不可变类型:

>>> str = 'abc'
>>> str[0] = 'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

使用三引号:"""..."""'''...''',得到的字符串所见即所得

>>> "hello " "world"  # 会被自动转换为hello world
'hello world'

分割/拼接

字符串分割函数主要有 str.split('=') 和 str.partition('='),区别在于:

  • split 输出的是列表,partition 输出的是元组
  • partition 的元组有三个元素,包括分割符('='),而 split 输出只有两个元素。
  • split 的字符参数若在字符串中不存在会报错,而 partition 不会

将列表 / 元组中的所有元素拼接成一个字符串:

str1 = ''.join(list1)
str2 = ''.join(tuple1)

将两个列表 / 元组中的所有元素按照下标合并:

# 例如,将列表en_sections中的字符串和zh_sections中的字符串两两拼接,变成一个新的列表
sections = [a + b for a, b in zip(en_sections, zh_sections)]
>>>a = [1,2,3]
>>> c = [4,5,6,7,8]
>>> list(zip(a,c))
[(1, 4), (2, 5), (3, 6)]

原始字符串

原始字符串中包括换行符之类的特殊符号

print(r'string')
print(repr(str))
>>> r'\\'
'\\\\'
>>> r'\'  # 注意不能以奇数个反斜杠结尾,这样最后一个引号会被视作字符串的一部分
  File "<stdin>", line 1
    r'\'
       ^
SyntaxError: EOL while scanning string literal

去除空格

>>> str = ' a bc '
>>> str.strip()
'a bc'
>>> str.lstrip()
'a bc '
>>> str.rstrip()
' a bc'

编码转换

字符 ↔ ASCII / Unicode,使用 ord()chr() 函数

ASCII 编码实际上是 UTF-8 编码的一部分

UTF-8 中使用三个字节表示一个汉字

UCS2,即两个字节表示一个字符

>>> ord('A')
65
>>> chr(97)
'a'
>>> hex(ord('龙'))
'0x9f99'
>>> chr(0x9f99)
'龙'
>>> '\u9f99'
'龙'
>>> '龙'.encode('utf-8')
b'\xe9\xbe\x99'
>>> b'\xe9\xbe\x99'.decode('utf-8')
'龙'

URL 编码的转换:

# Python2 的解码方法
if sys.version_info[0] < 3:
    import urllib
    return urllib.unquote_plus(text)
    return urllib.unquote(text)
	# Python2 的编码方法
	if isinstance(text, unicode):
        text = text.encode('utf-8', 'ignore')
    return urllib.quote_plus(text)
    return urlparse.quote(text)
# Python3 的解码方法
import urllib.parse
return urllib.parse.unquote_plus(text)
return urllib.parse.unquote(text)
# Python3 的编码方法
return urllib.parse.quote_plus(text)
return urllib.parse.quote(text)
posted @ 2020-08-19 11:30  x0c  阅读(1312)  评论(0编辑  收藏  举报