Попытка разбить один список на несколько списков внутри основного списка - Python - PullRequest
3 голосов
/ 08 сентября 2011

По какой-то причине я получаю эту трассировку при попытке разделить элементы с разделителями-запятыми в новый список и затем вставить их в более высокий список:

Traceback (most recent call last):
  File "S:/Personal Folders/Andy/Python Projects/People Cancelled/Analyze Customers Test.py", line 15, in <module>
    text[x] = textnew
TypeError: list indices must be integers, not str

Вот мой код:

from __future__ import division
from __future__ import print_function

in_file = open("s:/Personal Folders/Andy/Python Projects/People Cancelled/Analyze Authorize Truncated.csv")
text = in_file.readlines()
in_file.close()

header = text[0:1]
text = text[1:]

for x in text:
    textnew = x.split(",")
    text[x] = textnew

print(text)

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

['3545869260,59.95,AUTH_CAPTURE,Jack,Franklin,810-555-2222,jack@francypants.com,01-Apr-2011 05:24:10 PM PDT\n', '354589999,0,VOID,Jacob,Rasnip,8224309464,goodness@finland.com,01-Apr-2011 05:24:10 PM PDT\n']

Я в основном хочу сделать каждую часть информации, разделенную запятыми, ВНУТРИ списка в отдельный список, так что в основном это наборы списков внутри одного главногосписок.

Спасибо!

Ответы [ 5 ]

4 голосов
/ 08 сентября 2011

это ...

for x in text:
    textnew = x.split(",")
    text[x] = textnew

должно быть, это ...

for index, line in enumerate(text):
    text[index] = line.split(',')

Проблема в первом примере заключается в том, что вы используете x в качестве индекса для text, но текст - это массив строк, поэтому x всегда является строкой, а строка используется в качестве индекса массива. поскольку text[x] вызывает ошибку, потому что индексы массива должны быть целыми числами. Мой пример исправляет это, перечисляя text - который возвращает не онлайн строку как line, а номер строки как index. Надеюсь, что это имеет смысл; Я предлагаю поиграть с этим, пока вы не получите его.

3 голосов
/ 08 сентября 2011

У вас есть информация, которая вам нужна в сообщении об ошибке:

TypeError: индексы списка должны быть целыми числами, а не str

Вы, вероятно, хотите сделать что-то вроде:

the_new_list = [x.split(',') for x in text]

Пример:

>>> text = [
... '3545869260,59.95,AUTH_CAPTURE,Jack,Franklin,810-555-2222,jack@francypants.com,01-Apr-2011 05:24:10 PM PDT\n',
... '354589999,0,VOID,Jacob,Rasnip,8224309464,goodness@finland.com,01-Apr-2011 05:24:10 PM PDT\n']
>>> the_new_list = [x.split(',') for x in text]
>>> import pprint
>>> pprint.pprint(the_new_list)
[['3545869260',
  '59.95',
  'AUTH_CAPTURE',
  'Jack',
  'Franklin',
  '810-555-2222',
  'jack@francypants.com',
  '01-Apr-2011 05:24:10 PM PDT\n'],
 ['354589999',
  '0',
  'VOID',
  'Jacob',
  'Rasnip',
  '8224309464',
  'goodness@finland.com',
  '01-Apr-2011 05:24:10 PM PDT\n']]
>>>
0 голосов
/ 08 сентября 2011

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

[[x] for x in open('test.csv').read().split(',')]

Просто выключите 'test.csv' для любого вашего CSV-файла.

Или, если хотите, в три строки:

a = open('test.csv').read()
[[x] for x in a.split(',')]
a.close()
0 голосов
/ 08 сентября 2011

Вы ищете что-то подобное?

>>>>a = '3545869260,59.95,AUTH_CAPTURE,Jack,Franklin,810-555-2222,jack@francypants.com,01-Apr-2011 05:24:10 PM PDT\n', '354589999,0,VOID,Jacob,Rasnip,8224309464,goodness@finland.com,01-Apr-2011 05:24:10 PM PDT\n'
>>>for b in a:
    for x in b.split(','):
        c.append([x])    

>>> c
[['3545869260'], ['59.95'], ['AUTH_CAPTURE'], ['Jack'], ['Franklin'], ['810-555-2222'], ['jack@francypants.com'], ['01-Apr-2011 05:24:10 PM PDT\n'], ['354589999'], ['0'], ['VOID'], ['Jacob'], ['Rasnip'], ['8224309464'], ['goodness@finland.com'], ['01-Apr-2011 05:24:10 PM PDT\n']]
0 голосов
/ 08 сентября 2011

А как же

result = []
for x in text:
    textnew = x.split(",")
    result.append(textnew)
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...