将用逗号或分号分隔的值字符串转换为Python列表
我正在从一个配置文件中读取一串电子邮件地址。这些地址可以用逗号或分号分隔,比如:
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())