私のファイルに(読み取り専用)が含まれているとしましょう:
123.1.1.1 qwerty
123.0.1.1 timmy
(some text)
新しい単語に変更したいtimmy
のですが、ユーザーはいつでも変更できるため、コードのどこにも「timmy」という単語を使用しないでください。
Pythonで「特定の行に移動して最後の単語を置き換える」ことは可能ですか?
一般に、ファイルの行を繰り返すのは良いことです。したがって、巨大なファイルに対しても機能します。
私のアプローチは
単語間にどの空白があるかについて一貫性を保つために、各行を分割して再度結合します。気にしない場合は、をline
除いて手つかずのままにしてidx == 1
ください。break
次に、2行目()の後にループすることもできます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
)で上書きします。
例えば:
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)
説明が必要な場合は、お気軽にお問い合わせください。
この関数はあなたが達成したいことをします
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);
残念ながら、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