尝试在Python中将一个列表拆分成主列表内的多个列表

3

由于某些原因,当我尝试将逗号分隔的项目拆分成新列表,然后将它们插入到更高级别的列表中时,我会得到此回溯:

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

我希望能够将列表中逗号分隔的每个信息转换为一个单独的列表,即在一个主列表内有一堆子列表。
谢谢!

你能举一个简单的例子,包含一些输入和期望的输出吗? - rocksportrocker
5个回答

4

this...

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。希望这样能让你理解;我建议尝试操作一下,直到你明白为止。

3
你在错误信息中已经获得了所需的信息:

类型错误:列表索引必须是整数,而不是字符串

你可能想要做类似下面这样的事情:

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

关于什么?

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

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

0

试试这个,只有一行代码,应该能实现你想要的功能。

[[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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接