【问题标题】:Python Replace part of text in text filePython替换文本文件中的部分文本
【发布时间】:2017-03-30 22:24:34
【问题描述】:

当前文本文件:

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  

更新后的文本文件如下所示:

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  

我想将文本文件中的数字(0.15180.4910...)更改为新的数字(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

【问题讨论】:

  • 关于“我有问题”的任何进展?
  • “我有问题”错误继承自更一般的“不起作用”错误。检查错误的类型,看看你的问题是身体上的、精神上的还是精神上的。

标签: python text replace


【解决方案1】:
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()

【讨论】:

  • 感谢您的 cmets killantics。稍作修改后,它可以在我的机器上运行。我还有一个问题。我的原始文本文件约为 400MB,我只想在“C A0-ABC 和 C CI-ABC 之间更改文本,因为还有另一个 A(1) B(2) C(3) D(4)在文本文件中。请给我提示我应该怎么做?谢谢,
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多