在Python中,从用逗号分隔的数字列表中移除千位分隔符
我有一份数据列表,像下面这样:
a = ['"105', '424"', '"102', '629"', '"104', '307"']
我想把这些数据整理成下面这样的格式:
a = ['105424', '102629', '104307']
我不知道该怎么做。我想过先把所有的逗号去掉,然后再在应该有逗号的地方加上逗号,最后再去掉引号。但我发现这真的挺难的。
5 个回答
1
你的数据是不是像这样:
"123", "123,456", "123,456,789"
如果是的话,可以试试这个:
input = '"123", "123,456", "123,456,789"'
import re
reg = re.compile('"(\d{1,3}(,\d{3})*)"')
stringValues = [wholematch.replace(',', '') for wholematch, _endmatch
in reg.findall(input)]
这个正则表达式也可以处理带小数点的千位数。
re.compile('"(\d{1,3}(,\d{3})*(\.\d*)?)"')
1
如果你的数据是CSV格式的,建议你参考@steven的回答。
无论如何,这里有一种处理你粘贴内容的方法。
正如@troutwine所说,这种方法只有在数字部分总是成对出现时才有效。
a = ['"105', '424"', '"102', '629"', '"104', '307"']
from itertools import izip
def pairwise(iterable):
"s -> (s0,s1), (s2,s3), (s4, s5), ..."
a = iter(iterable)
return izip(a, a)
result = []
for x, y in pairwise(a):
result.append(''.join([x, y]).strip('"'))
print result
结果是:
['105424', '102629', '104307']
这里的成对代码片段:遍历列表中的每两个元素
4
我假设这些数据最开始是放在一个csv文件里的,里面有些数据包含逗号,比如说“105,424”、“102,629”、“104,307”,然后你可能是通过逗号来分割这些数据:
>>> '"105,424","102,629","104,307"'.split(',')
['"105', '424"', '"102', '629"', '"104', '307"']
其实你应该让csv
模块来处理这些数据,因为它可以自动处理那些双引号:
import csv
with open('u:\\foobar.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print [x.replace(',','') for x in row]
这样打印出来的结果是:['105424', '102629', '104307']