【问题标题】:How to remove more than one space when reading text file读取文本文件时如何删除多个空格
【发布时间】:2016-10-10 07:24:42
【问题描述】:

问题:我似乎无法解析文本文件中的信息,因为 python 将其作为完整字符串读取,而不是单独的单独字符串。每个变量之间的空格不是 \t,这就是它不分开的原因。 python有没有办法灵活去掉空格,换成逗号或者\t?

示例数据:

MOR125-1   MOR129-1   0.587
MOR125-1   MOR129-3   0.598
MOR129-1   MOR129-3   0.115

我正在使用的代码:

with open("Distance_Data_No_Bootstrap_RAW.txt","rb") as f:
reader = csv.reader(f,delimiter="\t")
d=list(reader)
for i in range(3):
    print d[i]

输出: ['MOR125-1 MOR129-1 0.587'] ['MOR125-1 MOR129-3 0.598'] ['MOR129-1 MOR129-3 0.115']

期望的输出:

['MOR125-1', 'MOR129-1', '0.587']
['MOR125-1', 'MOR129-3', '0.598']
['MOR129-1', 'MOR129-3', '0.115']

【问题讨论】:

  • 将分隔符更改为空格,并使用 .strip() 字符串方法去除任何多余的空格
  • 如果我将分隔符更改为空格,则字符串中存在的所有单个空格都会变成逗号。此时它是一个列表,其中包含用逗号分隔的字符串和空格。如果不是完整列表,我不确定如何执行 .strip() 来删除空格

标签: python python-2.7 csv


【解决方案1】:

您可以简单地将分隔符声明为空格,并要求 csv 跳过分隔符后的初始空格。这样一来,您的分隔符实际上就是正则表达式' +',即一个或多个空格。

rd = csv.reader(fd, delimiter=' ', skipinitialspace=True)
for row in rd:
    print row
['MOR125-1', 'MOR129-1', '0.587']
['MOR125-1', 'MOR129-3', '0.598']
['MOR129-1', 'MOR129-3', '0.115']

【讨论】:

    【解决方案2】:

    您可以指示csv.reader 使用空格作为分隔符并跳过所有多余的空格:

    reader = csv.reader(f, delimiter=" ", skipinitialspace=True)
    

    有关可用参数的详细信息,请查看Python docs

    方言.delimiter 用于分隔字段的单字符字符串。它默认为“,”。 方言.skipinitialspace 当为 True 时,紧跟在分隔符后面的空格将被忽略。默认为 False。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多