【问题标题】:How can i split text data to a list?如何将文本数据拆分为列表?
【发布时间】:2012-12-08 14:09:55
【问题描述】:

我有一个像这样的文本文件

1;2;3;4
5;6;7;8

我想把它改成:

[[1,2,3,4],[5,6,7,8]]

使用 Python,我怎样才能做到这一点?*

【问题讨论】:

  • 你尝试了什么?
  • 你做过试探吗?请在此处发布您的代码

标签: python split


【解决方案1】:

您可以使用以下内容:

data = [[int(i) for i in line.split(';')] for line in open(filename)]

使用 csv 模块的替代方法:

import csv
data = [[int(i) for i in ln] for ln in csv.reader(open(filename), delimiter=';')]

如果字符串列表是可接受的:

data = [line.split(';') for line in open(filename)]

或 csv 等价物:

data = list(csv.reader(open(filename), delimiter=';'))

【讨论】:

  • 顺便说一句,我有一个巨大的数据,我试图将 csv 模块应用到它,我得到了“MemoryError”,我该如何处理?
【解决方案2】:

作为多行字符串:

>>> s = """1;2;3;4
5;6;7;8"""

>>> [[int(x) for x in a.split(';')] for a in s.splitlines()]
[[1, 2, 3, 4], [5, 6, 7, 8]]

【讨论】:

    【解决方案3】:

    由于您的数据似乎是某种类似于 CSV 的数据,为什么不使用 python 的csv parsing module?它可以免费处理编码并支持分隔符。

    如果您只需要一些代码,请使用列表推导式并使用splitstr 方法进行拆分:

    result = [line.split(';') for line in text.split("\n")]
    

    【讨论】:

      【解决方案4】:

      '1;2;3;4'.split(';') 将从字符串'1;2;3;4' 生成列表[1, 2, 3, 4],因此您只需对文件中的每一行执行此操作:

      def split_lists(filepath, sep=';'):
          with open(filepath) as f:
              line_lists = []
              for line in f:
                  line_lists.append(line.split(sep))
              return line_lists
      

      或者更简洁的理解

      def split_lists(filepath, sep=';'):
          with open(filepath) as f:
              return [line.split(sep) for line in f]
      

      【讨论】:

        【解决方案5】:

        感谢有趣的问题,可以通过2个map和1个for循环解决

        s='1;2;3;4\n5;6;7;8'
        map(lambda seq: [int(i) for i in seq], map(lambda x:x.split(';'), s.split('\n')))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-09
          • 2018-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多