如何替换文本文件特定列的多行

时间:2019-05-13 10:15:55

标签: python replace text-files multiple-columns

我有多个文件,我想从一个文件复制两列,然后将其替换为另一个文件中的另外两列。 第一个文件包含:

ag-109   3.905E-07  
am-241   1.121E-06  
am-243   7.294E-09  
cs-133   1.210E-05  
eu-151   2.393E-08  
eu-153   4.918E-07  
gd-155   2.039E-08  
mo-95   1.139E-05  
nd-143  9.869E-06  

.......
........

第二个文件是:

h-1         10  0 0.06674    293   end  
zr          11  0 0.0423     293   end  
u-234       101 0 7.471e-06  293   end  
u-235       101 0 0.0005265  293   end  
u-236       101 0 0.0001285  293   end  
u-238       101 0 0.02278    293   end  
np-237      101 0 1.018e-05  293   end  
pu-238      101 0 2.262e-06  293   end  
pu-239      101 0 0.000147   293   end  
.........  
.......
.   
.    
u-234       1018 0 7.471e-06 293   end  
u-235       1018 0 0.0005265 293   end  
u-236       1018 0 0.0001285 293   end  
u-238       1018 0 0.02278   293   end  
np-237      1018 0 1.018e-05 293   end  
pu-238      1018 0 2.262e-06 293   end  

我想将file2的第一列从file1替换,并将file1的第二列替换为file2的第四列。

文件2包含更多行,我想继续阅读而不更改。

第二个问题是:  file2重复列1 18次。列“ 101”到“ 1018” 第一列中的每18个核素在第4列中具有不同的值

我尝试逐行读取file1,并且对file2相同。 然后从特定值“ 11”开始替换 包括每当核素迭代结束时第2列要更改的条件(我有29个核素)。

with open('100_60.inp','a+') as fapp:
    with open("20_3.2_10_100_18.txt") as copf:
        line = fapp.readline()
       # if not line:
        #    break
        source = re.split(r"\s+", line.strip())

        nuclide = copf.readline()
       # if not nuclide:
         #   break
        comp = re.split(r"\s+", nuclide.strip())

if len(source)==6 and source[1] != '11':
           for i in range(29):
               source[3][i]= nuclide[1][i]
               source[0][i] = nuclide[0][i]
               fapp.append(replace(source[0][i],nuclide[0][i]))
if len(source)==6 and source[1] !='101':
               for i in range(29):
               source[3][i]= nuclide[1][i]
               source[0][i] = nuclide[0][i]
               fapp.append(replace(source[0][i],nuclide[0][i]))

预期结果必须是这样的:

h-1         10  0 0.06674    293    end  
zr          11  0 0.0423     293    end  
ag-109      101 0 3.905E-07 293   end  
am-241      101 0 1.121E-06 293   end  
am-243      101 0 7.294E-09 293   end  
cs-133      101 0 1.210E-05   293   end  
eu-151      101 0 2.393E-08 293   end  
eu-153      101 0 4.918E-07 293   end  
gd-155      101 0 2.039E-08  293   end  
....  
....  
....   

1 个答案:

答案 0 :(得分:1)

我认为,如果您设法将文本文件转换为csv和column一起使用,将会更加容易。

如果列由制表符分隔,您也可以在excel中进行操作,而不必自己编写脚本https://support.geekseller.com/knowledgebase/convert-txt-file-csv/

之后,您可以使用csv模块并通过获取可在其中添加或删除键(列)的字典来读取文件。我目前无法为您编写一个完整的解决方案,但是我希望这能为您提供一些解决方案的提示。