消除额外的逗号

时间:2012-06-09 03:33:19

标签: python regex string text text-processing

我无法在数据文本文件中用一个逗号替换三个逗号。

我正在处理一个大文本文件,将其放入逗号分隔格式,以便我可以使用数据库进行查询。

我在命令提示符下执行以下操作,它可以正常工作:

  >>> import re
  >>> line = 'one,,,two'
  >>> line=re.sub(',+',',',line)
  >>> print line
  one,two
  >>>

以下是我的实际代码:

  with open("dmis8.txt", "r") as ifp:
      with open("dmis7.txt", "w") as ofp:
          for line in ifp:
              #join lines by removing a line ending.
              line=re.sub('(?m)(MM/ANGDEC)[\r\n]+$','',line)
              #various replacements of text with nothing. This removes the text
              line=re.sub('IDENTIFIER','',line)
              line=re.sub('PART','50-1437',line)
              line=re.sub('Eval','',line)
              line=re.sub('Feat','',line)
              line=re.sub('=','',line)
              #line=re.sub('r"++++"','',line)
              line=re.sub('r"----|"',' ',line)
              line=re.sub('Nom','',line)
              line=re.sub('Act',' ',line)
              line=re.sub('Dev','',line)
              line=re.sub('LwTol','',line)
              line=re.sub('UpTol','',line)
              line=re.sub(':','',line)
              line=re.sub('(?m)(Trend)[\r\n]*$',' ',line)
              #Remove spaces replace with semicolon
              line=re.sub('[ \v\t\f]+', ',', line)
              #no worky line=re.sub(r",,,",',',line)
              line=re.sub(',+',',',line)
              #line=line.replace(",+", ",")
              #line=line.replace(",,,", ",")
              ofp.write(line)

这是我从上面的代码得到的: 有几个逗号在一起。我不明白为什么他们不会被替换为一个逗号。 没关系,我不会看到额外的逗号是如何到达那里的。

  50-1437,d
  2012/05/01
  00/08/27
  232_PD_1_DIA,PED_HL1_CR,,,12.482,12.478,-0.004,-0.021,0.020,----|++++
  232_PD_2_DIA_TOP,PED_HL2_TOP,,12.482,12.483,0.001,-0.021,0.020,----|++++
  232_PD_2_DIA,PED_HL2_CR,,12.482,12.477,-0.005,-0.021,0.020,----|++++
  232_PD_2_DIA_BOT,PED_HL2_BOT,,12.482,12.470,-0.012,-0.021,0.020,--|--++++

原始数据供参考:

  PART IDENTIFIER         :  d
  2012/05/01
  00/08/27
  232_PD_1_DIA  Eval Feat =  PED_HL1_CR   MM/ANGDEC
                    Nom           Act           Dev         LwTol         UpTol         Trend
                 12.482        12.478        -0.004        -0.021         0.020     ----|++++

  232_PD_2_DIA_TOP  Eval Feat =  PED_HL2_TOP   MM/ANGDEC
                 12.482        12.483         0.001        -0.021         0.020     ----|++++

  232_PD_2_DIA  Eval Feat =  PED_HL2_CR   MM/ANGDEC
                 12.482        12.477        -0.005        -0.021         0.020     ----|++++

有人可以指出我做错了吗?

提前感谢...

2 个答案:

答案 0 :(得分:2)

你的正则表达式工作正常。问题是你用你的正则表达式擦除了之后你连接它们的行(write()

相反,在所有行上使用"".join(),在整个内容上运行re.sub(),然后write()将所有行全部运行到文件中。

答案 1 :(得分:0)

我认为您的问题是由于删除行结尾不加入行这一事实,以及write不会在每个字符串的末尾添加换行符这一事实。因此,您有多个输入行,在输出中看起来像一行。

看一下这些评论,你似乎认为只用一个空字符串替换行的末尾就会神奇地将下一行添加到它,但这实际上并不起作用。因此,您看到的三个逗号不会被re.sub命令替换,因为它们不在一行中,它们是多个输入行(在所有替换之后都是空的除外因为你删除了'\n'个字符而被打印到单个输出行的逗号,并且write不会自动将'\n'添加到每个写入字符串的末尾(与{{1不同) }})。

要调试代码,只需在每行代码后加print,看看每行“实际”是什么 - 这应该可以帮助您了解出现了什么问题。

通常,读取每个“记录”跨越多行的文件格式需要比print line循环更复杂的方法。