0

重複の可能性:
Python で 4 文字の単語を置き換える

宿題として、ファイルを開き、4 文字の単語をすべて「xxxxxx」に置き換えてから、テキストを新しいファイルに書き込む必要があります。

これは、与えられた元のファイルのファイル テキストです。

The 3 lines in this file end with the new line character.

There is a blank line above this line.

これは私がこれまでに持っているものです:

def censor(filename):

    infile=open(filename,"r")

    content=infile.read()infile.close()

    outfile = open("censored.txt","w")

    content=content.replace("this","xxxxxx")

    content=content.replace("file","xxxxxx")

    content=content.replace("with","xxxxxx")

    content=content.replace("line","xxxxxx")

    outfile.write(content)

    outfile.close()

結果は次のとおりです。

The 3 xxxxxxs in xxxxxx xxxxxx end xxxxxx the new xxxxxx character.

There is a blank xxxxxx above xxxxxx xxxxxx.

現在、「行」が「xxxxxxs」に変更されているため、「行」ではなく「行」だけを変更するのに問題があります。

これを行う特定の方法を知っている人はいますか?if文は必要ですか?

4

3 に答える 3

1

これで始められます。これはテストされていませんが、単語に句読点がある場合は解決するはずです。また、3行より長いファイルに対応するため、より堅牢であり、知っている単語だけでなく4文字の単語も削除されます。

def censor(filename):
   infile = open(filename,"r")
   outfile = open("censored.txt","w")
   for line in infile:
       wordArr=line.split(" ");
       for word in wordArr:
           word = ''.join(c for c in string if c.isalnum())
           if len(word)==4:
               line=line.replace(word,"XXXXX")
       outfile.write(line)
   outfile.close()
   infile.close()

他の人は正規表現の使用を推奨していますが、この問題は簡単に解決できると言わざるを得ないので、正規表現はかなりの複雑さを追加します。特にプログラミングの初心者にとっては。ただし、正規表現は非常に便利で強力に学ぶことができます。

于 2013-02-01T21:11:58.093 に答える
0
content=content.replace("\\bline\\b","xxxxxx")

しかし、教師がスニペット内の各4文字の単語をハードコーディングすることを望まない可能性が非常に高いです。おそらく、任意のテキストファイルのALLLL4文字の単語に対してコードが機能することを望んでいます。これには、私があなたに考えてみることをお勧めする別のアプローチが必要になります(-=

于 2013-02-01T21:09:02.130 に答える
0

まず、再インポートします:

import re

次に、空白でない文字列の 4 つの連続をすべて xxxx に置き換えます。

content = re.sub(r"(\b)\w{4}(\b)", r"\1xxxxx\2", content)

REPL でテストします:

>>> import re
>>> re.sub(r"(\b)\w{4}(\b)", r"\1xxxxx\2", "Thes 3 lines in this file end with the new line character.")
'xxxxx 3 lines in xxxxx file end xxxxx the new xxxxx character.'
于 2013-02-01T21:14:44.987 に答える