我无法在数据文本文件中用一个逗号替换三个逗号。
我正在处理一个大文本文件,将其放入逗号分隔格式,以便我可以使用数据库进行查询。
我在命令提示符下执行以下操作,它可以正常工作:
>>> 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 ----|++++
有人可以指出我做错了吗?
提前感谢...
答案 0 :(得分:2)
你的正则表达式工作正常。问题是你用你的正则表达式擦除了之后你连接它们的行(write()
)。
相反,在所有行上使用"".join()
,在整个内容上运行re.sub()
,然后write()
将所有行全部运行到文件中。
答案 1 :(得分:0)
我认为您的问题是由于删除行结尾不加入行这一事实,以及write
不会在每个字符串的末尾添加换行符这一事实。因此,您有多个输入行,在输出中看起来像一行。
看一下这些评论,你似乎认为只用一个空字符串替换行的末尾就会神奇地将下一行添加到它,但这实际上并不起作用。因此,您看到的三个逗号不会被re.sub
命令替换,因为它们不在一行中,它们是多个输入行(在所有替换之后都是空的除外因为你删除了'\n'
个字符而被打印到单个输出行的逗号,并且write
不会自动将'\n'
添加到每个写入字符串的末尾(与{{1不同) }})。
要调试代码,只需在每行代码后加print
,看看每行“实际”是什么 - 这应该可以帮助您了解出现了什么问题。
通常,读取每个“记录”跨越多行的文件格式需要比print line
循环更复杂的方法。