前言
Python 中字符串的转换,这是编程中非常基础且高频的操作,核心分为两类:一是其他类型转字符串,二是字符串转其他类型(如整数、浮点数、布尔值等),我会分场景给出具体用法和示例,确保你能直接套用。
一、核心场景 1:其他类型 → 字符串(最常用)
Python 中最通用的方法是 str() 函数,能将几乎所有类型(数字、布尔值、列表、字典等)转为字符串格式。
- 基础类型转字符串
python
# 1. 整数 → 字符串
num_int = 123
str_int = str(num_int)
print(type(str_int), str_int) # <class 'str'> 123
# 2. 浮点数 → 字符串
num_float = 3.14
str_float = str(num_float)
print(type(str_float), str_float) # <class 'str'> 3.14
# 3. 布尔值 → 字符串(True→"True",False→"False")
bool_val = True
str_bool = str(bool_val)
print(type(str_bool), str_bool) # <class 'str'> True
# 4. 列表/字典 → 字符串(保留原格式)
list_val = [1, 2, 3]
str_list = str(list_val)
print(type(str_list), str_list) # <class 'str'> [1, 2, 3]
dict_val = {"name": "Tom", "age": 18}
str_dict = str(dict_val)
print(type(str_dict), str_dict) # <class 'str'> {'name': 'Tom', 'age': 18}
- 进阶:格式化拼接转字符串(更灵活)
如果需要自定义字符串格式,推荐用 f-string(Python 3.6+ 最佳实践):
python
name = "Alice"
age = 20
# f-string 直接嵌入变量,自动转字符串
str_info = f"姓名:{name},年龄:{age}"
print(str_info) # 姓名:Alice,年龄:20
二、核心场景 2:字符串 → 其他类型(需注意格式匹配)
转换时要确保字符串内容符合目标类型的格式,否则会抛出 ValueError,建议配合异常处理。
- 字符串 → 整数 / 浮点数
python
# 1. 字符串 → 整数(字符串必须是纯数字,不能有小数点/字母)
str_num1 = "456"
int_num = int(str_num1)
print(type(int_num), int_num) # <class 'int'> 456
# 2. 字符串 → 浮点数(支持纯数字/带小数点的字符串)
str_num2 = "7.89"
float_num = float(str_num2)
print(type(float_num), float_num) # <class 'float'> 7.89
# 3. 异常处理(避免格式错误崩溃)
str_invalid = "12a3"
try:
int(str_invalid)
except ValueError:
print("字符串格式错误,无法转为整数") # 输出:字符串格式错误,无法转为整数
- 字符串 → 布尔值
bool() 转换规则:空字符串 → False,非空字符串 → True(即使是 "False" 也会转成 True):
python
# 空字符串 → False
str_empty = ""
bool_empty = bool(str_empty)
print(bool_empty) # False
# 非空字符串 → True(无论内容是什么)
str_false = "False"
bool_false = bool(str_false)
print(bool_false) # True
# 正确转换"True"/"False"为布尔值的方法
def str_to_bool(s):
if s.lower() == "true":
return True
elif s.lower() == "false":
return False
else:
raise ValueError("字符串必须是 'True' 或 'False'")
print(str_to_bool("True")) # True
print(str_to_bool("false")) # False
- 字符串 → 列表 / 字典(需用专用方法)
直接用 str() 转的字符串无法直接转回原结构,需用 eval() 或 json 模块(推荐 json,更安全):
python
# 方式1:eval()(简单但有安全风险,不建议处理未知字符串)
str_list = "[1,2,3]"
list_val = eval(str_list)
print(type(list_val), list_val) # <class 'list'> [1,2,3]
# 方式2:json模块(推荐,处理字典/列表更安全)
import json
str_dict = '{"name":"Tom","age":18}' # 注意:json要求字符串用双引号
dict_val = json.loads(str_dict)
print(type(dict_val), dict_val) # <class 'dict'> {'name': 'Tom', 'age': 18}
三、拓展:字符串编码 / 解码转换
处理中文、特殊字符时,需要用到字符串与字节的转换(编码 / 解码):
python
# 字符串 → 字节(编码,常用utf-8)
str_zh = "你好"
bytes_zh = str_zh.encode("utf-8")
print(type(bytes_zh), bytes_zh) # <class 'bytes'> b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 字节 → 字符串(解码)
str_zh2 = bytes_zh.decode("utf-8")
print(type(str_zh2), str_zh2) # <class 'str'> 你好
总结
- 其他类型转字符串:优先用 str() 通用转换,自定义格式用 f-string;
- 字符串转其他类型:
- 转数字用 int()/float(),注意格式匹配 + 异常处理;
- 转布尔值避免直接用 bool(),自定义函数处理 "True"/"False" 更准确;
- 转列表 / 字典推荐用 json.loads()(安全),而非 eval();
- 编码转换:字符串↔字节用 encode("utf-8")/decode("utf-8"),处理中文必备。