Stud.txtファイルを開いて、「A」の出現箇所を「オレンジ」に置き換えるにはどうすればよいですか?
Stud.txtファイルを開いて、「A」の出現箇所を「オレンジ」に置き換えるにはどうすればよいですか?
回答:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
同じファイル内の文字列を置き換える場合は、おそらくその内容をローカル変数に読み込んで閉じ、書き込み用に再度開く必要があります。
この例では、withステートメントを使用しています。これwith
は、ブロックが終了した後、通常は最後のコマンドの実行が終了したとき、または例外によってファイルを閉じるものです。
def inplace_change(filename, old_string, new_string):
# Safely read the input filename using 'with'
with open(filename) as f:
s = f.read()
if old_string not in s:
print('"{old_string}" not found in {filename}.'.format(**locals()))
return
# Safely write the changed content, if found in the file
with open(filename, 'w') as f:
print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
s = s.replace(old_string, new_string)
f.write(s)
ファイル名が異なる場合は、1つのwith
ステートメントでこれをよりエレガントに行うことができたことに言及する価値があります。
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Linuxを使用していて、単語dog
を単に置き換えたいcat
場合は、次のようにします。
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Linuxコマンド:
sed -i 's/dog/cat/g' test.txt
出力:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
元の投稿:https : //askubuntu.com/questions/20414/find-and-replace-text-within-a-file-using-commands
pathlibの使用(https://docs.python.org/3/library/pathlib.html)
from pathlib import Path
file = Path('Stud.txt')
file.write_text(file.read_text().replace('A', 'Orange'))
入力ファイルと出力ファイルが異なっていた場合、以下の二つの異なる変数を使用しますread_text
とwrite_text
。
単一の置換よりも複雑な変更が必要な場合は、の結果をread_text
変数に割り当て、それを処理して新しいコンテンツを別の変数に保存してから、で新しいコンテンツを保存しwrite_text
ます。
ファイルが大きい場合は、メモリ内のファイル全体を読み取るのではなく、別の回答でGareth Davidsonが示しているように1行ずつ処理するアプローチを好むでしょう(https://stackoverflow.com/a/4128192/3981273)もちろん、入力と出力に2つの異なるファイルを使用する必要があります。
最も簡単な方法は、正規表現でそれを行うことです。ファイルの各行( 'A'が格納されている場所)を反復処理したいと仮定すると...
import re
input = file('C:\full_path\Stud.txt), 'r')
#when you try and write to a file with write permissions, it clears the file and writes only #what you tell it to the file. So we have to save the file first.
saved_input
for eachLine in input:
saved_input.append(eachLine)
#now we change entries with 'A' to 'Orange'
for i in range(0, len(old):
search = re.sub('A', 'Orange', saved_input[i])
if search is not None:
saved_input[i] = search
#now we open the file in write mode (clearing it) and writing saved_input back to it
input = file('C:\full_path\Stud.txt), 'w')
for each in saved_input:
input.write(each)