1

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

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

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

  >>> 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     ----|++++

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

提前致谢...

4

2 回答 2

2

您的正则表达式工作正常。问题在于,在用正则表达式擦洗它们之后write(),你连接了这些行(通过它们) 。

相反,"".join()在你的所有行上使用,re.sub()在整个事情上运行,然后write()一次全部到文件中。

于 2012-06-09T03:50:49.230 回答
0

我认为您的问题是由于删除行结尾不加入 lineswrite再加上没有在每个字符串的末尾添加换行符的事实引起的。所以你有多个输入行,看起来像输出中的一行。

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

要调试您的代码,只需print line在每行代码之后放置,以查看每条“行”实际上是什么 - 这应该可以帮助您了解出了什么问题。

一般来说,读取每个“记录”跨越多行的文件格式需要比for line in file循环更复杂的方法。

于 2012-06-09T03:49:26.583 回答