python中是否有库/命令来更改文本文件中特定位置的值?
E.g。假设我有一个名为test.txt的文件,其中包含以下数据:
abc 123.2 45 text_data
ghk 12.43 123.45 89.3
关键是这个文本文件不能被读作结构化数据,例如通过使用pandas或假设存在常规列。
所以,我有一个单独的文件,我指定需要更改为新值的行和列。
row column_start column_end new_value
2 5 9 10.4
第二行中的12.43应替换为test.txt中的10.4
答案 0 :(得分:2)
获得该行后,提取行,开始,结束和val,然后您可以使用fileinput.input更改原始文件:
from fileinput import input
from sys import stdout
line = "2 5 9 10.4"
r, st, ed, val = line.split()
r, st, ed = int(r), int(st), int(ed)
for ind, line in enumerate(input("test.txt",inplace=True), 1):
if ind == r:
stdout.write(line.replace(line[st-1:ed], val))
else:
stdout.write(line)
这可能不仅仅取代您想要的值,因此切片可能是最安全的方法:
for ind, line in enumerate(input("test.txt", inplace=True), 1):
if ind == r:
new = line[:st-1] + val + line[ed:]
stdout.write(new)
else:
stdout.write(line)
如果要更改多行,请使用dict创建映射:
from fileinput import input
from sys import stdout
with open("changes.txt") as f:
next(f)
data = {int(r): {"st": int(st), "ed": int(ed), "val": val} for r, st, ed, val in map(str.split, f)}
for ind, line in enumerate(input("test.txt"), 1):
if ind in data:
d = data[ind]
new = line[:d["st"] - 1] + d["val"] + line[d["ed"]:]
stdout.write(new)
else:
stdout.write(line)
答案 1 :(得分:1)
怎么样
import sys
# load the values from the instruction file however you want (a separate problem)
row=2
column_start=5
column_end=9
new_value=10.4
# process the data
for line_num, contents in enumerate(open("test.txt")):
if line_num == row - 1:
contents = contents[:column_start-1] + str(new_value) + contents[column_end:]
# write the results somewhere
sys.stdout.write(contents)