2011-05-26 233 views
3

内检测到负数所以我有一些文本文件这样一行:蟒蛇:字符串

STRT .M     -9.0: START DEPTH 

我想检测负数,并用0.1替换它。

我可以检测负号,简单地通过查找 ' - '

text.count('-') 

如果text.count( ' - ')> 0,有一个负数。

我的问题是:如何替换数字为0.1的字符串中的'-9.0'?最后,我想输出:

STRT .M     0.1: START DEPTH 
+0

注意:负数在不同文件之间有所不同。它并不总是-9.0。 – 2011-05-26 00:59:37

+0

这是固定宽度吗? (也就是说,如果替换的字符不像原始字符那么多,那么这很重要吗?) – 2011-05-26 01:00:17

+0

不,它可能是-9.0,-10.1,-11.123等等,所以我需要一个通用的解决方案来替换任何负的十进制数与0.1。 – 2011-05-26 01:04:07

回答

6

简单的解决方案是用户.replace('-9.0','0.1')see documentation for .replace()),但我认为你需要更灵活基于正则表达式的解决方案:

import re 
new_string = re.sub(r'-\d+\.\d+', '0.1', your_string) 
+0

同意。我应该更清楚。负数可以是任何负数。 – 2011-05-26 00:59:05

+1

@Flux它也可以是整数? – Tadeck 2011-05-26 01:00:04

+0

好问题。我怀疑这是一个整数,但我不能100%确定,因为我没有查看每个〜200个文件。 – 2011-05-26 01:06:32

1

正则表达式可以做到这一点:

>>> import re 
>>> regex = re.compile(r' -\d+(\.\d+)?:') 
>>> regex.sub(' 0.1:', 'STRT .M     -9.0: START DEPTH') 
'STRT .M     0.1: START DEPTH' 
>>> regex.sub(' 0.1:', 'STRT .M     -19.01: START DEPTH') 
'STRT .M    0.1: START DEPTH' 
>>> regex.sub(' 0.1:', 'STRT .M     -9: START DEPTH') 
'STRT .M     0.1: START DEPTH' 

re.sub documentation

+0

如果负数是ANY负数而不仅仅是-9.0,这项工作是否可行? – 2011-05-26 00:58:40

+0

请注意,这不适用于例如'-10.0',更不用说'-9'(无小数位)。修复很简单,如果它不是固定宽度的,但OP没有指定... – 2011-05-26 00:59:37

+0

它已被[修订](http://stackoverflow.com/posts/6132632/revisions)现在似乎是能够做到这一点。 – joar 2011-05-26 09:29:49

4

看起来你正在使用LAS文件。您可以查看libLAS以查看它是否适合您。这里是一个tutorial