【问题标题】:how to replace multiple lines of specific columns of text file如何替换文本文件特定列的多行
【发布时间】:2019-05-13 10:15:54
【问题描述】:

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

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  
....  
....  
....   

【问题讨论】:

  • 您应该将输出写入不同的文件,而不是附加到原始文件
  • 无论如何,我的代码不起作用。你能给我一些提示吗

标签: python replace text-files multiple-columns


【解决方案1】:

我认为,如果您设法将文本文件转换为使用列的 csv,将会容易得多。

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

之后,您可以使用 csv 模块并通过获取可以添加或删除键(列)的 dict 来读取文件。我现在不能为你编写一个完整的工作解决方案,但我希望这能给你一些关于如何处理它的提示。

【讨论】:

  • 谢谢,我尝试将我的文件转换为 csv,但我的代码输入对任何空间都非常敏感,当我创建它时,在代码的其他部分创建了一些空间,这使得它没有运行。
  • 这有点笼统,也许可以尝试提供更多细节并提供一些代码等。您可以随时尝试去除空白和类似的东西。
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多