如何在Python中把字符串转换为整数、浮点数、日期时间、字节、列表、元组...等。
在这篇文章中,你将学习如何将Python字符串转换为其他数据类型。
在与客户交互的过程中,Python字符串起着重要作用。
你从input()
函数中收到的数据、XML和来自网络API的JSON数据最初都被格式化为字符串。
后台服务器必须解释或解析字符串,将其转换为所需的数据类型,然后执行必要的操作。
>>> name = input("What is your name?: ")
What is your name? John
>>> type(name)
<class 'str'>
1. 转换为数字
让我们从如何将一个Python字符串转换为所需格式的数字开始。
所有的数字转换都有可能会失败。当它发生时,会抛出一个异常,所以你应该始终包括异常处理。 下面的示例代码都包括异常处理。
1.1. 整数
要把一个Python字符串转换成一个整数,可以使用int()
构造函数。
构造函数是用来创建某些 Python 类的对象的特殊函数。我们将在类的文章中谈及它们。
下面是一个成功的整数转换的例子。
str_one_hundred = "100"
str_minus_five = "-5"
try:
one_hundred = int(str_one_hundred)
minus_five = int(str_minus_five)
except ValueError:
print(f"Couldn't cast {repr(str_one_hundred)} to a number")
print(f"Couldn't cast {repr(str_minus_five)} to a number")
else:
print(f"one_hundred: {one_hundred}")
print(f"minus_five: {minus_five}")
# Output:
# one_hundred: 100
# minus_five: -5
整数转换失败的例子包括
str_alphabet = "abc"
try:
alphabet = int(str_alphabet)
except ValueError:
print(f"Couldn't cast {repr(str_alphabet)} to a number")
else:
print(f"alphabet: {alphabet}")
# Output:
# Couldn't cast 'abc' to a number
1.2. 实数
要将一个Python字符串转换为实数,可以使用float()
构造函数。
下面是一个成功转换为实数的例子。
str_three_point_two_four = "3.24"
str_zero_point_one_two = "-0.12"
try:
three_point_two_four = float(str_three_point_two_four)
zero_point_one_two = float(str_zero_point_one_two)
except ValueError:
print(f"Couldn't cast {repr(str_three_point_two_four)} to a float")
print(f"Couldn't cast {repr(str_zero_point_one_two)} to a float")
else:
print(f"three_point_two_four: {three_point_two_four}")
print(f"zero_point_one_two: {zero_point_one_two}")
# Output:
# three_point_two_four: 3.24
# zero_point_one_two: -0.12
整数转换失败的例子包括
str_alphabet = "abc"
try:
alphabet = float(str_alphabet)
except ValueError:
print(f"Couldn't cast {repr(str_alphabet)} to a float")
else:
print(f"alphabet: {alphabet}")
# Output:
# Couldn't cast 'abc' to a float
1.3. 二进制
Python 不支持自己的二进制数据类型。 因此,二进制字符串必须被转换为整数类型,以便管理它们。
要转换为整数,请使用int()
构造函数,其中有可选的base
参数。
binary_string = "101010"
binary_integer = int(binary_string, base=2)
print(binary_integer)
# Outputs: 42
如果你想以二进制格式输出结果的整数,你可以使用F-string帖子中讨论的方法。
你也可以决定是否添加前缀0b
作为格式指定符。
print(f'{binary_integer:#b}', f'{binary_integer:b}')
('0b101010', '101010')
1.4. 十六进制
Python 不支持自己的十六进制数据类型。 因此,十六进制字符串必须转换为整数类型,以便管理它们。
要转换为整数,使用带有可选的base
参数的int()
构造函数。
hexa_string = "14F0"
hexa_integer = int(hexa_string, base=16)
print(hexa_integer)
# Outputs: 5360
如果你想以十六进制格式输出结果的整数,你可以使用F-string帖子中讨论的方法。
你也可以决定是否添加前缀0x
作为格式指定符。
print(f'{hexa_integer:#x}', f'{hexa_integer:x}')
('0x14f0', '14f0')
2. 容器类型
Python 内置的容器类型--列表、图元、集合和字典--也可以从字符串转换。 然而,如果你试图用构造函数来转换它们,就像转换数字一样,你会得到一个与预期不同的结果,如下所示。
friends = "[Mark, Elon]"
friends_tuple = "(Mark, Elon)"
print(list(friends))
print(tuple(friends_tuple))
# Output:
# ['[', 'M', 'a', 'r', 'k', ',', ' ', 'E', 'l', 'o', 'n', ']']
# ('(', 'M', 'a', 'r', 'k', ',', ' ', 'E', 'l', 'o', 'n', ')')
因此,我们需要另一种方法来解析这些容器类型。
标准Python库中的ast
模块提供的literal_eval()
函数提供了一种方便的方法来解析和转换它们。
这个函数是对eval()
函数的替代,它可以被黑掉。
2.1. 列表
将字符串转换为列表格式的代码可以写成如下形式
import ast
list_string = "['item1', 'item2', 'item3']"
my_list = ast.literal_eval(list_string)
print(my_list)
print(type(my_list))
# Output:
# ['item1', 'item2', 'item3']
# <class 'list'>
2.2. 元组
将一个字符串转换为元组格式的代码可以这样写
import ast
tuple_string = "('item1', 'item2', 'item3')"
my_tuple = ast.literal_eval(tuple_string)
print(my_tuple)
print(type(my_tuple))
# Output:
# ('item1', 'item2', 'item3')
# <class 'tuple'>
2.3. 集合
用集合格式转换一个字符串的代码可以写成以下样子
import ast
set_string = "{'item1', 'item2', 'item3'}"
my_set = ast.literal_eval(set_string)
print(my_set)
print(type(my_set))
# Output:
# {'item3', 'item2', 'item1'}
# <class 'set'>
2.4. 字典
用字典格式转换一个字符串的代码可以写成如下。
import ast
dict_string = "{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}"
my_dict = ast.literal_eval(dict_string)
print(my_dict)
print(type(my_dict))
# Output:
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
# <class 'dict'>
3. 字节型字符串
要将一个字节格式的字符串转换为bytes
数据类型,请使用str.encode()
方法。
byte_like_string = "b'Hello'"
actual_bytes = byte_like_string[2:-1].encode('utf-8')
print(actual_bytes) # Outputs: b'Hello'
print(type(actual_bytes)) # Outputs: <class 'bytes'>
它去掉了在Python中表示字节的前缀,只将内容转换为encode()
方法。
你可以用type(){;py}
函数来检查字节的类型。
4. 日期时间
要从Python字符串中提取和读取日期和时间信息,可以使用datetime
模块的strptime()
方法。
参见 datetime - 3. 格式化和解析日期和时间 以了解解释和示例代码。 以了解更多信息。
5. 总结
到目前为止,我们已经看到了如何将Python字符串转换成几种不同的类型,包括数字、容器类型、字节类型以及日期和时间。 字符串类型是程序与用户交流的一种方式,所以很好地理解和使用它们很重要。
