我有多个文件,我想从一个文件复制两列,然后将其替换为另一个文件中的另外两列。 第一个文件包含:
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
....
....
....
答案 0 :(得分:1)
我认为,如果您设法将文本文件转换为csv和column一起使用,将会更加容易。
如果列由制表符分隔,您也可以在excel中进行操作,而不必自己编写脚本https://support.geekseller.com/knowledgebase/convert-txt-file-csv/
之后,您可以使用csv模块并通过获取可在其中添加或删除键(列)的字典来读取文件。我目前无法为您编写一个完整的解决方案,但是我希望这能为您提供一些解决方案的提示。