【问题标题】:Python: Splitting a string twice to form a 2D list [duplicate]Python:将字符串拆分两次以形成二维列表[重复]
【发布时间】:2012-11-27 09:33:40
【问题描述】:

我正在尝试将日志文件拆分为 2D 列表。第一个列表在每个标签处拆分,然后在第二级它在每个换行符处拆分。我得到字符串并将其拆分以获得第一个,但是当我循环遍历它以再次拆分它时,我在底部得到错误。我已经看过并尝试了不同的东西,但没有运气。这对我来说似乎是对的,但我对 python 还很陌生。

with open('log.txt', 'r') as f:
     read_data = f.read().split('tag:         "')
f.closed

for i in read_data:
    print read_data[i].split()

错误:

File "parsing.py", line 6, in <module>
    print read_data[i].split()
TypeError: list indices must be integers, not str

【问题讨论】:

  • 很明显,i 不是read_data 的索引。 print i.split() 怎么样?
  • i 中的每个 read_data 都是一个字符串。
  • 顺便说一句,f.closed 什么都不做。这不是你关闭文件的方式,无论如何它会在离开with 块时自动关闭。

标签: python string split


【解决方案1】:

read_data 是一个字符串列表。然后将列表中的每个字符串依次放入i。到目前为止,一切都很好。但是,然后您尝试使用i(它是一个字符串)作为索引。你应该做的是:

print i.split()

【讨论】:

    【解决方案2】:
    with open('log.txt', 'r') as f:
        data2D = [x.split() for x in f.read().split('tag:         "') ]
    

    【讨论】:

    • 这不是二维列表,y ... 的缺失在哪里?
    【解决方案3】:

    @您的代码的第 2 版:

    Python 中的字符串是不可变的。这意味着它们永远不会改变 - 你只能创建一个内容改变的新字符串:

    >>> x = "Foo\r\n"
    >>> x
    "Foo\r\n"
    >>> x.rstrip("\r\n")
    "Foo"
    >>> x
    "Foo\r\n"
    

    如您所见,rstrip() 没有更改名为x 的字符串的值。相反,它返回了一个改变的字符串。如果您不关心以前的值,您可以将名称 x 重新分配给新值:

    >>> x = x.rstrip("\r\n")
    >>> x
    "Foo"
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多