将用逗号或分号分隔的值字符串转换为Python列表

3 投票
7 回答
10980 浏览
提问于 2025-04-16 10:57

我正在从一个配置文件中读取一串电子邮件地址。这些地址可以用逗号或分号分隔,比如:

billg@microsoft.com,steve@apple.com, dhh@37signals.com
billg@microsoft.com;steve@apple.com;  dhh@37signals.com

我还想去掉电子邮件地址周围的空格。

我需要把它们放进一个Python列表,像这样:

['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']

用Python最好的方法是什么呢?谢谢。

7 个回答

1

你可以使用string.maketrans这个方法,一次性把多个分隔符替换成空格。

import string

data = "one  two,  three ; four "
stuff = [i for i in data.translate(string.maketrans(";,", "  ")).split()]

print stuff   # -> ['one', 'two', 'three', 'four']
6

正则表达式很强大,通常在这种情况下是个不错的选择;不过对于这么简单的事情,使用字符串的方法也可以。这里有一个简洁的解决方案:

[s.strip() for s in s1.replace(',', ';').split(';')]

测试输出:

>>> s1 = "billg@microsoft.com,steve@apple.com, dhh@37signals.com"
>>> s2 = "  billg@microsoft.com;steve@apple.com;  dhh@37signals.com  "
>>> print [s.strip() for s in s1.replace(',', ';').split(';')]
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
>>> print [s.strip() for s in s2.replace(',', ';').split(';')]
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
10

在这种情况下,我会使用 re 模块。

>>> import re
>>> 
>>> data = "billg@microsoft.com;steve@apple.com;  dhh@37signals.com"
>>> stuff = re.split(r"\s*[,;]\s*", data.strip())

撰写回答