由逗号或分号分隔的值的字符串到Python列表中

时间:2011-01-31 18:02:54

标签: python string list

我正在从配置文件中读取电子邮件地址列表。地址可以用逗号或分号分隔 - 例如

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']

最恐怖的做法是什么?感谢。

7 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分: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']

答案 2 :(得分:1)

如果它只是';'或者只有','并且你知道哪个,使用string.split:

>>> 'adjifjdasf;jdiafjodafs;jdiajof'.split(';')
['adjifjdasf', 'jdiafjodafs', 'jdiajof']

http://docs.python.org/library/stdtypes.html#str.split

编辑对于空格,您也可以这样做:

>>> map(str.strip, 'adjifjdasf;jdiafjodafs ; jdiajof'.split(';'))
['adjifjdasf', 'jdiafjodafs', 'jdiajof']

答案 3 :(得分: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']

答案 4 :(得分:1)

你可以使用Python的字符串操作工具来完成它:

import string

s1 = "billg@microsoft.com,steve@apple.com, dhh@37signals.com"
s2 = "billg@microsoft.com;steve@apple.com;  dhh@37signals.com"

print s1.translate(string.maketrans(';',','), string.whitespace).split(',')
# ['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
print s2.translate(string.maketrans(';',','), string.whitespace).split(',')
# ['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']

答案 5 :(得分:0)

data = '''   billg@microsoft.com,steve@apple.com, dhh@37signals.com  
  billg@microsoft.com;steve@apple.com;\t  \rdhh@37signals.com       '''

print repr(data),'\n'

import re

print re.findall('[^,\s;]+', data)

结果

'   billg@microsoft.com,steve@apple.com, dhh@37signals.com  \n  billg@microsoft.com;steve@apple.com;\t  \rdhh@37signals.com       ' 

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

注意此数据中的'\ n','\ t'和'\ r'

答案 6 :(得分:-1)


def gen_list(file_path):
    read= open(file_path, "r")
    split1= read.split(";")
    new_list= []
    for i in split1:
       split2 = i.split(",")
       split_list = [item.strip() for item in split2 if "@" in item]
       new_list.extend(split_list)
       return new_list

# 这适用于逗号和;行数可以进一步减少