【问题标题】:Trying to Split One List into Multiple Lists Inside of a Main List - Python尝试将一个列表拆分为主列表内的多个列表 - Python
【发布时间】:2011-11-13 06:41:48
【问题描述】:

由于某种原因,当我尝试将逗号分隔的项目拆分到一个新列表中然后将它们插入到更高的列表中时,我得到了这个回溯:

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

我基本上想将列表中的每条逗号分隔的信息变成一个单独的列表,所以基本上是一个主列表中的一堆列表。

谢谢!

【问题讨论】:

  • 你能举一个简单的例子吗?

标签: python string list iteration


【解决方案1】:

这...

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。希望这是有道理的;我建议在你得到它之前玩弄它。

【讨论】:

    【解决方案2】:

    你在错误信息中有你需要的信息:

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

    【讨论】:

      【解决方案3】:

      怎么样

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

      【讨论】:

        【解决方案4】:

        你在寻找这样的东西吗?

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-11-25
            • 2019-06-05
            • 2011-05-05
            • 2015-12-13
            • 2022-01-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多