知用网
柔彩主题三 · 更轻盈的阅读体验

Python字符串转换的10种实用操作,开发中天天用

发布时间:2026-01-20 23:51:20 阅读:148 次

做数据处理、写爬虫、搞自动化脚本,Python里最常打交道的就是字符串。可现实很骨感:API返回的是字符串,Excel读出来是字符串,用户输入也是字符串——但你要算加法、比大小、转日期,就得先把它变成数字、布尔、datetime……别急,这些转换其实都有现成解法。

字符串转数字

最常见的是转整数和浮点数:

int('123')      # → 123
float('3.14')   # → 3.14
int('  42  ')   # → 42(自动去空格)

注意:带字母或空格的会报错,比如 int('12a')int(' 12 ')(中间有空格)不行,得先用 strip() 清理:

s = ' 123 '
num = int(s.strip())  # → 123

字符串转布尔值

Python没有内置的 bool('true') 直接映射,因为 bool('false') 居然也是 True(非空字符串恒为真):

bool('false')  # → True(不是你想要的结果!)

稳妥做法是手动判断:

def str_to_bool(s):
    return s.lower() in ('true', '1', 'yes', 'on')

str_to_bool('True')   # → True
str_to_bool('0')      # → False

字符串转列表或元组

逗号分隔的字符串转列表?用 split()

'apple,banana,orange'.split(',')  # → ['apple', 'banana', 'orange']
'1-2-3-4'.split('-')             # → ['1', '2', '3', '4']

如果想转成数字列表,套个 map 就行:

list(map(int, '1,2,3'.split(',')))  # → [1, 2, 3]

字符串转字典

JSON格式字符串最常用:

import json
s = '{"name": "张三", "age": 28}'
data = json.loads(s)  # → {'name': '张三', 'age': 28}

普通键值对字符串(如 name=张三&age=28),可以用 urllib.parse.parse_qs

from urllib.parse import parse_qs
qs = 'name=%E5%BC%A0%E4%B8%89&age=28'
parse_qs(qs)  # → {'name': ['张三'], 'age': ['28']}

字符串转日期时间

从日志、表单、文件名里提取时间,datetime.strptime 是主力:

from datetime import datetime
s = '2024-05-20 14:30:00'
dt = datetime.strptime(s, '%Y-%m-%d %H:%M:%S')

常见格式码记两三个就够用:%Y(4位年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)。

字符串转字节与编码互转

网络请求、文件读写经常遇到编码问题:

'你好'.encode('utf-8')     # → b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf-8')  # → '你好'

如果不确定编码,可以试试 chardet 库检测(先 pip install chardet):

import chardet
raw = b'\xc4\xe3\xba\xc3'  # GBK 编码的 '你好'
encoding = chardet.detect(raw)['encoding']  # → 'GB2312'
raw.decode(encoding)

其他实用小技巧

• 字符串转 ASCII 码列表:[ord(c) for c in 'abc'][97, 98, 99]
• ASCII 码列表转字符串:bytes([97, 98, 99]).decode()'abc'
• 十六进制字符串转字节:bytes.fromhex('68656c6c6f')b'hello'
• 字节转十六进制字符串:b'hello'.hex()'68656c6c6f'

避坑提醒

eval() 能转字符串为任意 Python 对象,但极度危险,千万别用在不可信输入上;
ast.literal_eval() 安全得多,只支持基础类型(str、int、list、dict等);
• 所有转换操作都建议包在 try/except 里,尤其面对用户输入或外部数据时。