Python でファイルの行を置き換える
-
Python で
for
ループをreplace()
関数と一緒に使用してファイル内の行を置き換える - 更新されたコンテンツで新しいファイルを作成し、Python で元のファイルを置き換える
-
Python で 1 行のテキストを置き換えるための
fileinput.input()
関数を使用する -
Python で
re
モジュールを使用して 1 行のテキストを置き換える
ファイル処理は、Web アプリケーションの重要な側面と見なされています。ほとんどのプログラミング言語と同様に、Python はファイル処理を完全にサポートできます。これにより、さまざまなタイプのファイルを処理でき、基本的に読み取りや書き込みなどの基本的な操作を実行できます。また、ファイルを操作するためのその他のファイル処理オプションもいくつか提供します。
このチュートリアルでは、Python でファイルの行を置き換えるために使用できるさまざまな方法を示します。
この記事のファイルの行を置き換えるさまざまな方法を示すために、テキストファイル motivation.txt
を取り上げます。
テキストファイル(motivation.txt
):
There are always second chances in life. Anybody can bounce back from hardships. The hardships that we face are just a test to check our will. A strong will is all it takes to bounce back from a loss.
このファイルのストレージディレクトリのパスは、リーダーのコンピュータによって異なる場合があります。したがって、それに応じて調整することをお勧めします。
Python で for
ループを replace()
関数と一緒に使用してファイル内の行を置き換える
open()
関数は、Python でファイルを開くために使用されます。ファイルは、プログラマーに応じて、テキスト形式またはバイナリ形式のいずれかで開くことができます。open()
関数にはさまざまなモードがあり、それらすべてがファイルを開くためのさまざまなアクセシビリティオプションを提供します。
単純な for
ループは、指定されたテキストファイルのすべての行をトラバースして、置換する行を見つける従来の方法です。次に、replace()
関数を使用して目的の行を置き換えることができます。これはすべて、読み取り
モードで実行されます。最後に、ファイルが書き込み
モードで開かれ、置き換えられたコンテンツが指定されたファイルに書き込まれます。
次のコードは、replace()
関数とともに for
ループを使用しています。
# opening the file in read mode
file = open("motivation.txt", "r")
replacement = ""
# using the for loop
for line in file:
line = line.strip()
changes = line.replace("hardships", "situations")
replacement = replacement + changes + "\n"
file.close()
# opening the file in write mode
fout = open("motivation.txt", "w")
fout.write(replacement)
fout.close()
更新されたコンテンツで新しいファイルを作成し、Python で元のファイルを置き換える
このプロセスを実装するために、いくつかの機能が機能しています。このメソッドを正常に実行するには、これらすべての機能のプロセスに関する知識が必要です。3つのモジュールから Python コードにいくつかの関数をインポートする必要があります。
- まず、
tempfile
モジュールからmkstemp()
関数をインポートする必要があります。この関数は、パスとファイル記述子とともにタプルを出力として返すために使用されます。 - 次に、
shutil
モジュールから 2つの関数をインポートする必要があります。最初の関数はcopymode()
関数です。これは、許可ビットをソースから宛先パスにコピーする際に使用されます。2 番目の関数はmove()
関数で、ファイルをある場所から別の場所に移動できます。 - 最後に、
OS
モジュールからremove()
関数をインポートする必要があります。この関数を使用すると、パスを削除できます。
エラーなしでコードを実行するには、これらすべてのモジュールを現在の Python コードにインポートする必要があります。この方法を実装するサンプルコードは次のとおりです。
from tempfile import mkstemp
from shutil import move, copymode
from os import fdopen, remove
# storing the path where the file is saved on your device as a variable
path = "C:\\Users\Admin\Desktop\python\test\motivation.txt"
def replacement(filepath, hardships, situations):
# Creating a temp file
fd, abspath = mkstemp()
with fdopen(fd, "w") as file1:
with open(filepath, "r") as file0:
for line in file0:
file1.write(line.replace(hardships, situations))
copymode(filepath, abspath)
remove(filepath)
move(abspath, filepath)
replacement(path, "hardships", "situations")
Python で 1 行のテキストを置き換えるための fileinput.input()
関数を使用する
fileinput.input()
メソッドは、ファイルを 1 行ずつ入力として取得し、主に、指定されたファイルのデータを追加および更新するために使用されます。
fileinput
および sys
モジュールは、エラーなしでコードを実行するために、現在の Python コードにインポートする必要があります。次のコードは、Python の行のテキストを置き換えるために fileinput.input()
関数を使用しています。
import fileinput
import sys
def replacement(file, previousw, nextw):
for line in fileinput.input(file, inplace=1):
line = line.replace(previousw, nextw)
sys.stdout.write(line)
var1 = "hardships"
var2 = "situations"
file = "motivation.txt"
replacement(file, var1, var2)
Python で re
モジュールを使用して 1 行のテキストを置き換える
re
モジュールは、Python が正規表現を扱うプログラマーに提供する組み込みモジュールであり、コードにインポートする必要があります。これは、特定の文字列でパターンを検索するタスクを実行するのに役立ちます。
このメソッドでは、RegEx
モジュールの re.compile()
と re.escape()
の 2つの関数を使用します。re.compile()
関数は、正規表現パターンから正規表現オブジェクトを生成するために使用され、その後、マッチングに使用されます。re.compile()
関数は、Python の特殊文字を無視またはエスケープするために使用されます。
次のコードは、Regex
モジュールのいくつかの関数を使用して、Python の行のテキストを置き換えます。
import re
def replacement(Path, text, subs, flags=0):
with open(filepath, "r+") as f1:
contents = f1.read()
pattern = re.compile(re.escape(text), flags)
contents = pattern.sub(subs, contents)
f1.seek(0)
f1.truncate()
f1.write(file_contents)
filepath = "motivation.txt"
text = "hardships"
subs = "situations"
replacement(filepath, text, subs)
ここでは、sub()
関数を使用して、指定されたパターンを文字列または指定された関数の結果に置き換えました。
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn