【问题标题】:Split string on white space在空白处拆分字符串
【发布时间】:2015-11-14 18:20:52
【问题描述】:

我有一个奇怪的格式文本文件,我正试图读入,但我不知道如何告诉 python 每行都以分隔符开头。

文本文件中的一行如下所示:

     3.146    -1.339      .358    29.214

文件使用 5 个空格作为分隔符。如何将每一行读入一个包含 4 个项目的列表?

【问题讨论】:

  • line.strip().split()?

标签: python python-2.7 delimiter


【解决方案1】:

您可以使用以下命令将每一行读入一个包含 4 个项目的列表:

with open(filename, 'r') as f:

    # this will read in each row as:
    #
    #   ['3.146', '-1.339', '.358', '29.214']
    #
    # so `lines` will contain
    #
    #   [['3.146', '-1.339', '.358', '29.214'], ...]
    lines = map(str.split, f.readlines())

    # or alternatively, as @jez mentioned, it may be more readable to use
    lines = [ line.split() for line in lines ]

    # you'll then likely want to convert them to floats
    # 
    # this will give you:
    #
    #   [[3.146, -1.339, 0.358, 29.214], ...]
    data = [ map(float, split_line) for split_line in lines ]

【讨论】:

  • readlines() 将返回一个列表。你不能split() 一个列表。您需要拆分列表中的每一行。
  • 为了可读性,lines = [ line.strip().split() for line in f ]怎么样
  • 好点!在这种情况下,由于我们没有使用非平凡的 lambda(Guido 对此持有如此不屑),我认为要么或多或少具有同等的可读性(当然,map is 不那么 Pythonic.. .)。如果我们想添加.strip(),那么 LC 肯定是更好的选择。 .split() 应该在行中的 all 空白处拆分,因此这里可能不需要 strip
【解决方案2】:

使用split 结合strip 删除多余的空格:

my_file_data = "     3.146    -1.339      .358    29.214"
data = my_file_data.strip().split('     ')
# do stuff with your data
print(data[0])

【讨论】:

    【解决方案3】:

    这是你的分隔符:

    delimiter=' '

    然后你只需使用分隔符分割你的文本行

    lineoftext.split(delimiter)

    【讨论】: