难搞的字串符

字符串编码转换

在 python3.x 中,默认采用编码格式为UTF-8
在 python 中,有两种常用的字符串类型,为bytes 和 str。str(Unicode字符)、bytes(二进制数据)
str(在内存中以Unicode表示)
如果在网路上传输,或者保存进硬碟,就需要把 str 传换成 bytes 类型

使用encode()函数解编码

str.encode([encoding = 'utf8'][, error = 'strict'])

str : 表示要转换的字符串
encoding='utf8' : 可选参数,用於指定进行转码时采用的字符编码
error = 'strict' : 用於指定错误的处理方式,有ignore, replace, xmlcharrefreplace......等,strict为默认值

  • 范例
ex = "人生苦短,我爱Python"
ex = ex.encode('utf8')
print(ex)
# b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe6\x84\x9bPython'
# 使用utf-81编码,转换後的二进制数据

使用decode()函数解码

  • 二进制转换回字符串
ex = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe6\x84\x9bPython'
print(ex.decode())
# 人生苦短,我爱Python

字符串常用操作

:package:在Python的开发过程中,很多时候都要对字符串做相应的处理,比如拼接、撷取、格式化......

拼接字符串

fir = "人生苦短"
sec = "我爱Python"
print(fir + " , " + sec)
# 人生苦短 , 我爱Python
  • 一定要字串型态加上字串型态才可以拼起来
fir = "人生苦短"
sec = "我爱Python"
num = 55
print(fir + " , "+ sec + num)
# TypeError: can only concatenate str (not "int") to str

所以说,一定要转换成相同的型态

计算字符串长度

在Python中,在默认的情况下,一个汉字占3个字节,数字及其它基本上都占1个字节

  • 在Python中,有提供len()函数计算长度
str_test = "人生苦短,我爱Python"
print(str_test)
# 13

然而,在默认的情况下,使用len()函数,所有字符都认为是1字节

  • 换成encode()函数
str_test = "人生苦短,我爱Python"
print(len(str_test.encode('utf-8')))
# 25
# 3 * 6 + 7 = 25

撷取字符串

  • 用slice(切片)的方式
str_test = 'abcdefg'
print(str_test[0:3:2])
# ac

如果在超出范围的情况下,可以用try......except IndexError解决

分割字符串

str.split(sep, maxsplit)

用於指定分割字符串,可以包含多个字符
可选参数,用於指定分割的次数,如果不指定或者为-1,则分割次数没有限制,否则返回结果列表元素各数最多为maxsplit+1

  • 举例
str_test = "abc \ndefg"
str_test.split()
print(str_test)
# abc 
# defg
  • 附赠
# 在某些情况下,需要分开进行输入
nums = list(map(int, input().split()))
print(nums)
# input 0 1 2 3 4 5 6 7 8 9 
# output [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

合并字符串

str_new = string.join(iterable)
  • 范例
str_test = ["a", "b", "c"]
print("-".join(str_test))
# a-b-c

检索字符串

  • 使用count()函数
str_test = "aaaabb"
print(str_test.count("a"))
# 4
  • 使用find()函数
# 返回首次出现的下标
str_test = "aaaabb"
print(str_test.find("b"))
# 4
  • 使用index()函数
# 返回首次出现的下标
str_test = "aaaabb"
print(str_test.index("b"))
# 4
  • 使用startwith()函数
# 确认开头首字母
str_test = "abcabcabc"
print(str_test.startswith("b"))
# False
  • 使用endswith()函数
# 确认末尾字母
str_test = "abcabcabc"
print(str_test.endswith("c"))
# True

字母大小写转换

  • 使用lower()函数全部转小写
str_test = "wsdjahAKSJD"
print(str_test.lower())
# wsdjahaksjd
  • 使用upper()函数全部转大写
str_test = "wsdjahAKSJD"
print(str_test.upper())
# WSDJAHAKSJD

去除字符串中的空格和特殊字符

  • 可以使用strip()函数去除前後的空格

  • 当然还有lstrip()和rstrip()......
    *这里的特殊字符是指\t、\r、\n等

  • 使用strip()函数

# 掐头去尾
str_test = " ssd "
print(str_test)
#  ssd 
print(str_test.strip())
# ssd
  • lstrip()与rstrip()的概念一样
# l => left
# r => right
str_test = " ssd "
print(str_test.lstrip())
# ssd
print(str_test.rstrip())
#  ssd

格式化字符串

  • 使用format()函数
# str.format(args)
print("{} {} {:.5f}".format(50, "中", 20.5555556))
#c 50 中 20.55556

<<:  Day 8 边缘暗角效果 ( 镜头晕影 )

>>:  使用storyboard实现代理功能

後记

大家好,这是Kate的第二次参赛。 这次的心得也是:万岁,终於平安写完三十天了。 铁人赛这种东西是不...

除了刷题之外的事 - System Architecture

除了刷题之外的事 刷题是练习解决问题的能力的一种方法,而这里的「问题」主要是指演算法问题。但在实务...

Day 19 [Python ML、资料视觉化] Seaborn介绍

import pandas as pd import matplotlib.pyplot as pl...

JavaScript Day 2. 关於,运算子们

JavaScript 有许多的运算子,在这里就挑了几个比较常见,却又老是感到模糊的来研究。 赋值运算...

Day28-实作(灯箱)

做完了侧选单就要进入到第二区块 — 灯箱 首先,在src/components下新增lightbox...