2016-02-05 37 views
-7

我試圖將以下樣式文本文件從mm轉換爲m(即將所有數字除以1000)。它由一個常規模式組成,包含文本和數字。用文本和數字在文本文件中將單位從mm轉換爲m

我設法解決(最終)使用python,它有點粗糙和準備好,但它完成任務。任何建議/改進將不勝感激。

import re 
import numpy as np 
import linecache 
from io import StringIO 

myfile = "file" 
results = open("results.txt","w") 

for i in range(1,50000): 
    line = linecache.getline(myfile,i) 
    if re.search('[a-zA-Z]', line): 
     results.write(line)  
    elif line.isspace(): 
     results.write(str(line)) 
    elif re.search('[-]', line): 
     results.write(str(line)) 
    else: 
     c = StringIO(line) 
     data = np.loadtxt(c) 
     a = np.array(data) 
     c = a/1000 
     d = str(c).replace('[','').replace(']','') 
     results.write(str(d)+'\n') 
results.close() 

該文件是像這樣:

add 
tube 
3033303.0 2998206.95111 106180.1625 
60.325 6222.60621 
y 
0.0 0.0 
0.0 
add 
cube 
3027189.24332 3032175.78955 114508.75 
168.9 6170.76909 
y 
0.0 0.0 
0.0 

期望中的結果將是;

add 
tube 
3033.3030 2998.20695111 106.1801625 
0.060325 6.22260621 
y 
0.0 0.0 
0.0 
add 
cube 
3027.18924332 3032.17578955 114.50875 
0.1689 6.17076909 
y 
0.0 0.0 
0.0 
+1

堆棧溢出不是一個代碼編寫serivce – ppperry

+0

1.打開文件2.每一行,3,複製線路輸出,4,否則拆分線,轉換每一塊浮動,除以1000,轉換回一行文本,寫入輸出。它應該花費大約6分鐘來編寫和測試。 –

+0

我是新來編碼,所以不知道從哪裏開始。到目前爲止,我試圖讀取文件,刪除文本和空格,並轉換爲列表然後分割,但沒有取得任何進展。如果遇到「請爲我寫這段代碼」,我並不打算 - 只是需要一些指示。謝謝,休,我會試試。 – matman9

回答

1

在Perl容易,如果第一個字符是不是數字

perl -pe 's-(\d+.?\d*)-($1/1000)-ge' file 

add 
tube 
3033.303 2998.20695111 106.1801625 
0.060325 6.22260621 
y 
0 0 
0 
add 
cube 
3027.18924332 3032.17578955 114.50875 
0.1689 6.17076909 
y 
0 0 
0 
+1

驚人,如此簡單。謝謝@ 123 – matman9