3
def replace(file_path, pattern, subst):
   file_path = os.path.abspath(file_path)
   #Create temp file
   fh, abs_path = mkstemp()
   new_file = open(abs_path,'w')
   old_file = open(file_path)
   for line in old_file:
       new_file.write(line.replace(pattern, subst))
   #close temp file
   new_file.close()
   close(fh)
   old_file.close()
   #Remove original file
   remove(file_path)
   #Move new file
   move(abs_path, file_path)

ファイル内の文字列を置き換えるこの機能があります。しかし、パターンが見つかった行全体を置き換える良い方法がわかりません。

たとえば、パターン「ジョン」を使用して「ジョンは一日中一生懸命働いた」という行を置き換えたい場合、「マイクは一生懸命働いていませんでした」と置き換えます。

現在の関数では、行全体を置き換えるには、行全体をパターンで記述する必要があります。

4

1 に答える 1

7

まず、この部分を変更できます。

for line in old_file:
    new_file.write(line.replace(pattern, subst))

これに:

for line in old_file:
    if pattern in line:
        new_file.write(subst)
    else:
        new_file.write(line)

または、さらにきれいにすることもできます。

for line in old_file:
    new_file.write(subst if pattern in line else line)
于 2013-10-21T13:15:29.977 に答える