2016-12-10 2 views
0

У меня есть текстовый дамп букв и цифр, и я хочу отфильтровать только действительные номера кредитных карт (для класса, клянусь). Я использовалРазделить элемент на пробел в python 2

for item in content: 
    nums.append(re.sub('[^0-9]', ' ', item)) 

вывезти все, что не является число, поэтому у меня есть список элементов, которые являются числом с пробелом в середине. Если я не превращаю символы, отличные от int, в пробелы, числа заканчиваются конкатенацией, поэтому длины ошибочны. Я хочу разбить каждый элемент на новый элемент в пробеле.

Вот скриншот части образца продукции, так как я не могу скопировать его без питона поворачивая каждой группы из нескольких пространств в единое пространство: https://gyazo.com/4db8b8b78be428c6b9ad7e2c552454af

Я хочу, чтобы новый элемент каждый раз, когда есть одно или несколько пробелов. Я пробовал:

for item in nums: 
    for char in item: 
     char.split() 

и

for item in nums: 
    item.split() 

но в конечном итоге ничего не меняется.

+5

как в сторону, если какой-либо из этих данных в вашем скриншоте имеет «действительные» номера кредитных карт, подумайте об удалении этих чисел, просто fyi – davedwards

ответ

3

split не мутирует строку, но вместо этого возвращает список строк. Если вы вызываете его, не сохраняя результат, как в вашем примере, он ничего хорошего не сделает. Просто сохраните результат в split в новый список:

>>> nums = ['1231 34 42 432', '12 345345 7686', '234234 45646 435'] 
>>> result = [] 
>>> for item in nums: 
...  result.extend(item.split()) 
... 
>>> result 
['1231', '34', '42', '432', '12', '345345', '7686', '234234', '45646', '435'] 

В качестве альтернативы вы можете использовать список понимание сделать выше на одной линии:

>>> [x for item in nums for x in item.split()] 
['1231', '34', '42', '432', '12', '345345', '7686', '234234', '45646', '435'] 
Смежные вопросы