试图将一个列表拆分为主列表中的多个列表 - Python

时间:2011-09-08 19:23:16

标签: python string list iteration

出于某种原因,我在尝试将逗号分隔的项目拆分为新列表然后将它们插入更高的列表时得到此回溯:

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 个答案:

答案 0 :(得分:4)

此...

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

应该是这个......

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

第一个示例中的问题是您使用x作为text的索引,但text是一个字符串数组,因此x始终是一个字符串,并使用作为数组索引的字符串text[x]会引发错误,因为数组索引必须是整数。我的示例通过枚举text来解决此问题 - 它不会将字符串作为line在线返回,而是将行号返回为index。希望有意义;我建议你玩它直到你得到它。

答案 1 :(得分:3)

您可以在错误消息中获得所需信息:

  

TypeError:list indices必须是整数,而不是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']]
>>>

答案 2 :(得分:0)

怎么样?
result = []
for x in text:
    textnew = x.split(",")
    result.append(textnew)
print(result)

答案 3 :(得分:0)

你在找这样的东西吗?

>>>>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']]

答案 4 :(得分:0)

试试这个,它只有一行,它应该得到你想要的东西。

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

只需为你的csv文件切换'test.csv'

或者,如果你愿意,可以用三行:

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