2016-11-16 6 views
-2

現在のテキストファイルをテキストの一部を置き換えます。私は、テキストファイル(0.15180.4910に番号を変更したいPythonはテキストファイルに

NAME S1 2581751 2581758  1    
NAME S2 2581761 2581776  1    
NAME S3 2581779 2581786  1  
NAME S4 2581789 2581804  1   
NAME S5 2581807 2581814  1   
C  A0-ABC   
    A(1) = 0.2145  !k2    
    B(2) = 0.542 !K2O   
    C(3) = 0.35  !D2  
    D(4) = 0.0476  !CO   
    E(5) = 0.123  !C1   
C CI-ABC     
NAME S5 2581779 2581786  1    
NAME S5 2581789 2581804  1   
NAME S5 2581807 2581814  1 

NAME S1 2581751 2581758  1    
NAME S2 2581761 2581776  1    
NAME S3 2581779 2581786  1  
NAME S4 2581789 2581804  1   
NAME S5 2581807 2581814  1   
C  A0-ABC   
    A(1) = 0.1518  !k2    
    B(2) = 0.4910  !K2O   
    C(3) = 0.0314  !D2  
    D(4) = 0.0876  !CO   
    E(5) = 0.2382  !C1   
C CI-ABC     
NAME S5 2581779 2581786  1    
NAME S5 2581789 2581804  1   
NAME S5 2581807 2581814  1 

更新テキストファイルは次のようになります。 ..)から新しい番号(0.21450.5242 ...)に変換されます。最初はC A0-ABCC CI-ABCの間の行を取り出し、リストに保存してから番号を更新し、別の名前で保存します。しかし、私は元のテキストファイルに更新された番号を置き換える問題があります。

import sys 
import os 
import numpy as np    
import math   
import string 

path='Directory..'                
k2 =0.2145 
K2O=0.542 
D2 = 0.35 
CO = 0.476 
C1 = 0.123 
Update=[str(k2),str(K2O),str(D2),str(CO),str(C1)] 
files = os.listdir('.') 
f = open(path+'\Input.txt','r') 
lines = f.readlines() 
copy = False 
save_list=[] 
for line in lines : 
    if line.strip() == "C A0-ABC": 
     copy = True 
    elif line.strip() == "C CI-ABC": 
     copy = False 
    elif copy: 
     save_list.append(line) 

file= open(path+'\Update_INPF.txt','w') 
lis=[x.split() for x in save_list] 
A = [str(x[0]) for x in lis] 
B = [str(x[1]) for x in lis] 
C = Update 
D= [str(x[3]) for x in lis] 
F=zip(A,B,C,D) 

for x in list(F): 
    file.write("{0}\t{1}\t{2}\t{3}\n".format(*x)) 
file.close() 
print save_list 
+0

* "私は問題がある" *上の任意の進歩? – jonrsharpe

+1

「問題があります」エラーは、より一般的な「動作しません」というエラーを継承します。あなたの問題が肉体的、精神的または霊的であるかどうかを調べるには、エラーのタイプをチェックしてください。 – stark

答えて

0
path = 'Directory..'                

k2 = 0.2145 
K2O = 0.542 
D2 = 0.35 
CO = 0.476 
C1 = 0.123 

fold = open(path + '\Input.txt','r') 
fnew = open(path + '\Update_INPF.txt','w') 

for line in f.readlines(): 

    line = line.split() 

    if line[0] == 'A(1)': 
     newline = ' '.join(line[:2] + [str[k2]] + line[-1]) 
    elif line[0] == 'B(2)': 
     newline = ' '.join(line[:2] + [str[K20]] + line[-1]) 
    elif line[0] == 'C(3)': 
     newline = ' '.join(line[:2] + [str[D2]] + line[-1]) 
    elif line[0] == 'D(4)': 
     newline = ' '.join(line[:2] + [str[C0]] + line[-1]) 
    elif line[0] == 'E(5)': 
     newline = ' '.join(line[:2] + [str[C1]] + line[-1]) 
    else: 
     newline = line 

    fnew.write(newline) 

fold.close() 
fnew.close() 
+0

あなたのコメントkillanticsに感謝します。それは少し修正した後で私のマシンで動作します。私は別の質問があります。私の元のテキストファイルは約400MBであり、A(1)B(2)C(3)D(4)あなたが私が何をすべきかというヒントを教えてくれますか?ありがとう、 – cats099

関連する問題