我有一个由以下条目组成的文件:
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 数据帧中的相应值替换文件中的某些值的问题,例如:
i j k
0 unit1 unit2 unit3
1 1000 100 84
2 -3000 200 60
3 -2000 90 195
4 900 40 209
如何将 Pandas (Python) 数据帧中的特定值写入文件中的特定位置(即标识符之后)?
我得到了一个很好的解决方案。但是,我的文件中有一些行只需要替换 i 和 k 值。即,数据框看起来像:
i k
0 unit1 unit3
1 1000 84
2 -3000 60
3 -2000 195
4 900 209
在这种情况下,当我运行解决方案时没有任何反应。我尝试将“idx”更改为 2。我什至尝试将 idx 更改为“1”并仅针对 i 运行它(已删除与 j 和 k 相关的任何内容),然后运行 k。那也行不通。我无法在网上找到任何有关如何忽略/跳过字段的信息。如果有人有提示,我将不胜感激。
调整解决方案,不考虑具有多个字段的固定行,而是单独考虑字段。这里我们拆分
\n\n
来分别处理各个块。
import re
idx = 3
to_replace = 'B'
with (open('/tmp/input_file.txt', 'r') as f_in,
open('output_file.txt', 'w') as f_out):
s = df.loc[idx]
pat = r'\b(%s)\b(\s*=\s*)(\d+)' % '|'.join(s.index)
f_out.write('\n\n'.join(
re.sub(pat, lambda m: fr'{m.group(1)}{m.group(2)}{s.loc[m.group(1)]}',
block, flags=re.M | re.S)
if block.startswith(to_replace) else block
for block in re.split('\n\n', f_in.read())
)
)
输出:
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 = -3 k = -20
end