0

私のファイルに(読み取り専用)が含まれているとしましょう:

           123.1.1.1      qwerty
          123.0.1.1      timmy
          (some text)

新しい単語に変更したいtimmyのですが、ユーザーはいつでも変更できるため、コードのどこにも「timmy」という単語を使用しないでください。

Pythonで「特定の行に移動して最後の単語を置き換える」ことは可能ですか?

4

4 に答える 4

1

一般に、ファイルの行を繰り返すのは良いことです。したがって、巨大なファイルに対しても機能します。

私のアプローチは

  1. 入力を行ごとに読み取る
  2. 各行を分割する
  3. 2行目にある場合は2番目の単語を置き換えます
  4. パーツを再度結合する
  5. 出力ファイルに書き込む

単語間にどの空白があるかについて一貫性を保つために、各行を分割して再度結合します。気にしない場合は、を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)で上書きします。

于 2013-03-26T12:26:25.230 に答える
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)

説明が必要な場合は、お気軽にお問い合わせください。

于 2013-03-26T11:43:02.350 に答える
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);
于 2013-03-26T12:08:16.963 に答える
0

残念ながら、Pythonでは、ファイルを書き直さずに単純に更新することはできません。次のようなことをする必要があります。

次のようなファイルがあるとabcd.txtします。

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
于 2013-03-26T12:21:23.683 に答える