我有一个由以下条目组成的文件:
A first = 4 | 1_3_5_4 Name1
labelToSkip
i = 1000000 j = -3 k = -15
end
B first = 4 | 9_2_2_4 Name2
labelToSkip
i = 150000 j = -3 k = -20
end
...
我已经成功构建了一个 Pandas 数据框(df),其中包含我从另一个文件读取和修改的数据。数据框如下所示:
i j k
0 unit1 unit2 unit3
1 1000 100 84
2 -3000 200 60
3 -2000 90 195
4 900 40 209
现在我想从数据框中选择一行(如第 3 行)并将 i、j、k 值放入第一个文件中。
例如,我想输入数据帧第 3 行中的 i、j、k 值:
3 -2000 90 195
代替我选择的条目(如“B”)中的 i、j、k 值,得到:
B first = 4 | 9_2_2_4 Name2
labelToSkip
i = -2000 j = 90 k = 195
end
实际上,条目相当复杂,我需要替换的值并不总是在条目的第三行。我需要帮助的主要事情是如何在文件中找到(1)“B”或“Name2”,然后替换“B”或“Name2”下特定标识符后面的值。
对于没有提供尝试,我深表歉意。我知道如何将数据帧写入 .txt 文件(例如,来自这篇文章:将 Pandas 数据帧写入 .txt 文件)。我还发现了如何替换数据框中的特定值。但是,我找不到任何有关如何将数据帧中的特定值放在外部文件中的标识符之后的信息。如果有人可以提供提示,我将非常感激。
可能的解决方案之一是使用
re
模块:
import re
idx = 3
to_replace = "B"
with open("input_file.txt", "r") as f_in:
file_string = f_in.read()
i, j, k = df.loc[idx, ["i", "j", "k"]]
file_string = re.sub(
rf"^({to_replace}\s.*?)i = \S+ j = \S+ k = \S+",
f"\g<1>i = {i} j = {j} k = {k}",
file_string,
flags=re.M | re.S,
)
with open("output_file.txt", "w") as f_out:
f_out.write(file_string)
output_file.txt
将包含:
A first = 4 | 1_3_5_4 Name1
labelToSkip
i = 1000000 j = -3 k = -15
end
B first = 4 | 9_2_2_4 Name2
labelToSkip
i = -2000 j = 90 k = 195
end
input_file.txt
包含:
A first = 4 | 1_3_5_4 Name1
labelToSkip
i = 1000000 j = -3 k = -15
end
B first = 4 | 9_2_2_4 Name2
labelToSkip
i = 150000 j = -3 k = -20
end