2011-05-26 262 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