说我的文件包含(只读):
123.1.1.1 qwerty
123.0.1.1 timmy
(some text)
我想将timmy
更改为新词,但我不应在代码中的任何位置使用“timmy”一词,因为用户可以随时更改它。
在python中是否可以“转到特定行并替换最后一个单词”?
答案 0 :(得分:1)
通常,迭代文件的行是很好的,因此它也适用于大文件。
我的方法是
我拆分每一行并再次加入它,以便在单词之间有哪些空格。如果您不关心它,请保持line
不受影响,除非idx == 1
。然后你也可以在第2行(break
)之后idx==1
循环。
import shutil
input_fn = "15636114/input.txt"
output_fn = input_fn + ".tmp"
replacement_text = "hey"
with open(input_fn, "r") as f_in, open(output_fn, "w+") as f_out:
for idx, line in enumerate(f_in):
parts = line.split()
if idx==1:
parts[1] = replacement_text
line = " ".join(parts) + "\n"
f_out.write(line)
shutil.move(output_fn, input_fn)
我写入临时输出文件(为了在发生异常时保持输入文件不变),最后我用输出文件(shutil.move
)覆盖输入文件。
答案 1 :(得分:0)
例如:
text = """123.1.1.1 qwerty
123.0.1.1 timmy
(some text)
"""
import re
print re.sub(r'^(.*\n.*)\b(\w+)', r'\1hey', text)
结果:
123.1.1.1 qwerty
123.0.1.1 hey
(some text)
随意询问您是否需要解释。
答案 2 :(得分:0)
此功能将实现您想要实现的目标
def replace_word(filename, linenum, newword):
with open(filename, 'r') as readfile:
contents = readfile.readlines()
contents[linenum] = re.sub(r"[^ ]\w*\n", newword + "\n", contents[linenum])
with open(filename, 'w') as file:
file.writelines(contents);
答案 3 :(得分:0)
不幸的是在python中你不能简单地更新文件而不重写它。您必须执行以下操作。
假设您有一个名为abcd.txt
的文件,如下所示。
123.1.1.1 qwerty
123.0.1.1 timmy
然后你可以做这样的事情。
with open('abcd.txt', 'rw+') as new_file:
old_lines = new_file.readlines() # Reads the lines from the files as a list
new_file.seek(0) # Seeks back to index 0
for line in old_lines:
if old_lines.index(line) == 1: # Here we check if this is the second line
line = line.split(' ')
line[-1] = 'New Text' # replace the text
line = ' '.join(line)
new_file.write(line) # write to file