Python
基本資料型別
字符串
转换

如何在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字符串转换成几种不同的类型,包括数字、容器类型、字节类型以及日期和时间。 字符串类型是程序与用户交流的一种方式,所以很好地理解和使用它们很重要。

copyright for 如何在Python中把字符串转换为整数、浮点数、日期时间、字节、列表、元组...等。

© 2023 All rights reserved.