2015-10-10 3 views
0

В настоящее время я собираюсь перейти на веб-сайт API, получить его данные и прочитать его. Теперь я положил его в список, разделив информацию:Python 3 - разделить список

Currently результат:

[b'688284,332,2830336', b'661114,40,37229', b'978148,1,81', b'262250,69,736665', b'269715,68,605568', b'171278,73,1026179', b'1249503,1,15', b'246783,64,424574', b'-1,1,0', b'1826857,1,25', b'1515172,1,0', b'-1,1,0', b'-1,1,0', b'1655032,1,0', b'-1,1,0', b'-1,1,0', b'1453895,1,0', b'1520874,1,0', b'1561752,1,0', b'1508907,1,0', b'1416987,1,0', b'1437689,1,0', b'1421569,1,0', b'1391397,1,0', b'-1,-1', b'-1,-1', b'-1,-1', b''] 

Но что мне нужно сделать, это в этом списке, разделить исходные данные для очистки данных. Например, в списке [0] выход:

b'688286,332,2830336' 

мне нужны 3 числа без запятой или б отделенной в другой переменной. Как я мог это сделать?

+2

Возможный дубликат [разделение элементов списка на python] (http://stackoverflow.com/questions/6696027/split-elements-of-a-list-in-python) – Kasramvd

+0

Разделить элементы. – Zhendos

ответ

2

Split на запятой (используя b'..' байты строковых литералов), а затем использовать int() для преобразования целых чисел, используя списочные, чтобы обработать все строки и значение в каждой строке:

[[int(num) for num in value.split(b',')] for value in yourlist if value] 

if value фильтра пропускает пустые строки ,

Это производит вложенные списки; один за байтовую строку:

>>> yourlist = [b'688284,332,2830336', b'661114,40,37229', b'978148,1,81', b'262250,69,736665', b'269715,68,605568', b'171278,73,1026179', b'1249503,1,15', b'246783,64,424574', b'-1,1,0', b'1826857,1,25', b'1515172,1,0', b'-1,1,0', b'-1,1,0', b'1655032,1,0', b'-1,1,0', b'-1,1,0', b'1453895,1,0', b'1520874,1,0', b'1561752,1,0', b'1508907,1,0', b'1416987,1,0', b'1437689,1,0', b'1421569,1,0', b'1391397,1,0', b'-1,-1', b'-1,-1', b'-1,-1', b''] 
>>> [[int(num) for num in value.split(b',')] for value in yourlist if value] 
[[688284, 332, 2830336], [661114, 40, 37229], [978148, 1, 81], [262250, 69, 736665], [269715, 68, 605568], [171278, 73, 1026179], [1249503, 1, 15], [246783, 64, 424574], [-1, 1, 0], [1826857, 1, 25], [1515172, 1, 0], [-1, 1, 0], [-1, 1, 0], [1655032, 1, 0], [-1, 1, 0], [-1, 1, 0], [1453895, 1, 0], [1520874, 1, 0], [1561752, 1, 0], [1508907, 1, 0], [1416987, 1, 0], [1437689, 1, 0], [1421569, 1, 0], [1391397, 1, 0], [-1, -1], [-1, -1], [-1, -1]] 

Если вы хотите плоского списка, используйте только один список понимание, сочетающую в себе петлю:

[int(num) for value in yourlist if value for num in value.split(b',')] 

Однако, это звучит, как вы действительно разбор значения CSV здесь, из веб-URL. Расшифровать данные в текст и кормить его csv.reader() объекта для обработки расщеплению:

import io 
import csv 

response = urllib.request.urlopen(url) 
codec = response.info().get_param('charset', 'latin1') 
reader = csv.reader(io.TextIOWrapper(response, encoding=codec)) 
for row in reader: 
    row = [int(col) for col in row] 
    # do something with each row 

или прочитать ответ на одном дыхании (urllib.request библиотеки, кажется, бросить в больших задержках при использовании ничего, кроме прямой вверх .read() вызова для вашего образца URL):

response = urllib.request.urlopen(url) 
codec = response.info().get_param('charset', 'latin1') 
data = response.read().decode(codec) 
reader = csv.reader(data.splitlines()) 
for row in reader: 
    row = [int(col) for col in row] 
    # do something with each row 

в get_param() вызове запросы, если сервер сказал нам, какой кодек использовать для декодирования ответа, отступая к ISO-8859-1 (Latin-1) в качестве значения по умолчанию для HTTP-ответы.

+0

Я не понимаю, не могли бы вы привести мне пример кода? – Zhendos

+0

Объект 'list' не имеет атрибута 'split' – Zhendos

+1

@ Zhendos: тогда у вас есть * вложенные списки * в вашем списке ввода. Мой код предназначен для работы со структурой, опубликованной в вашем вопросе. –

Смежные вопросы