Нужно создать массив массивов для каждой строки - PullRequest
0 голосов
/ 04 июля 2018

Итак, у меня есть данные, которые выглядят примерно так:

>> print data
"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"

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

>> print array_data
[["12345","string1","string2","string3","string4","string5"],
["67890","string6","string7","string8","string9","string10"]]

Я попробовал несколько вещей, и это самое близкое, что я получил:

>> temp_list = []
>> for line in data.splitlines(): temp_list.append([line])
>> print temp_list
[['"12345","string1","string2","string3","string4","string5"'],
['"67890","string6","string7","string8","string9","string10"']]

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

Заранее спасибо!

Ответы [ 5 ]

0 голосов
/ 04 июля 2018

Вы почти у цели.

>> temp_list = []
>> temp_list = [list(eval(line)) for line in data.splitlines()]
>> print temp_list
[['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
0 голосов
/ 04 июля 2018

Использование csv и io модулей из стандартной библиотеки:

import csv
from io import StringIO

d = '''"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"'''

res = list(csv.reader(StringIO(d)))

print(res)

[['12345', 'string1', 'string2', 'string3', 'string4', 'string5'],
 ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
0 голосов
/ 04 июля 2018

Дано:

>>> data
'"12345","string1","string2","string3","string4","string5"\n"67890","string6","string7","string8","string9","string10"'

Вы можете сделать (если ' иначе не указывает поля csv, в которых может быть ,!):

>>> [line.replace('"','').split(',') for line in data.splitlines()]
[['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]

Или вы можете использовать csv для правильной обработки запятых в полях:

>>> import csv
>>> [list(e) for e in csv.reader(data.splitlines())]
[['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
0 голосов
/ 04 июля 2018

Использование панд:

import pandas as pd

d = '''\
"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"'''

l = pd.read_csv(pd.compat.StringIO(d), header=None, dtype='object').values

И у вас есть l:

[['12345', 'string1', 'string2', 'string3', 'string4', 'string5'],
 ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
0 голосов
/ 04 июля 2018

Вы можете использовать ast и split

Настройка

import ast
d = '''
"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"
'''
templist=[]

Тогда просто

for line in d.strip().splitlines(): 
    templist.append([ast.literal_eval(st) for st in line.split(',')])

Обратите внимание, что вы также можете сделать oneliner, используя понимание списка

templist = [[ast.literal_eval(st) for st in line.split(',')] for line in d.strip().splitlines()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...