web-dev-qa-db-ja.com

ファイルの内容内の文字列を置換

Stud.txtファイルを開き、「A」の出現箇所を「オレンジ」に置き換えるにはどうすればよいですか?

81
Joey

入力ファイルを開き(読み取りモード)、出力ファイルに書き込む(書き込みモード)必要があります。出力ファイルへの書き込み中に、replace関数を使用します。その後、次のようにファイル名を保持するようにファイルの名前を変更します。

import os    

file_in = "Stud.txt"
file_out = "tmp.txt"
with open(file_in, "rt") as fin:
    with open(file_out, "wt") as fout:
        for line in fin:
            fout.write(line.replace('A', 'Orange'))

os.rename(file_out, file_in)

ファイル名を保持したい場合は、単に一時ファイルに書き込み、後で元のファイルを上書きします。別のファイルにする必要がある場合は、os.renameコマンドを省略してください。

161
Gareth Davidson

同じファイルの文字列を置き換えたい場合は、おそらくその内容をローカル変数に読み込んで閉じ、書き込みのために再度開く必要があります。

この例では 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:
        s = f.read()
        print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
        s = s.replace(old_string, new_string)
        f.write(s)

ファイル名が異なる場合は、単一のwithステートメントを使用してこれをよりエレガントに行うことができたことに言及する価値があります。

70
Adam Matan
  #!/usr/bin/python

  with open(FileName) as f:
    newText=f.read().replace('A', 'Orange')

  with open(FileName, "w") as f:
    f.write(newText)
32
Mark Kahn

何かのようなもの

file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')

<do stuff with the result>
9
TartanLlama

Linuxを使用していて、Word dogcatに置き換えるだけの場合:

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

6
user1767754
with open('Stud.txt','r') as f:
    newlines = []
    for line in f.readlines():
        newlines.append(line.replace('A', 'Orange'))
with open('Stud.txt', 'w') as f:
    for line in newlines:
        f.write(line)
6
Falmarri

最も簡単な方法は、正規表現を使用して、ファイルの各行(「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)
0
austinbv