1

ファイルの名前を文字列として受け取り、開いて読み取り、ファイル内の各 4 文字の単語を "XXXX" で変更する新しいファイルを書き込む関数を作成したいと考えています。

これまでのところ、私は持っています:

def change(filename):
    infile = open(filename,'r')
    outfile = open('changed.txt', 'w')
    l = infile.read()
    infile.close()
    x = l.split()

    for word in x:
        if len(word) == 4:
            outfile.replace(word,'XXX')

if ステートメント内で出力を台無しにしていると思いますが、これを修正する方法がわかりません。

私のファイル ('example.txt' と呼んでいます) には、「このファイルには 3 つの 4 文字の単語が含まれています」という内容があります。

私の出力ファイル「changed.txt」には、「XXXX XXXXにはXXXX文字の単語が3つ含まれています」というメッセージが表示されます。

4

2 に答える 2

0
import re
re.sub('([^\w]|^)\w{4}(?=[^\w]|$)', r'\1XXXX', input)

トリックを行う必要があります。

編集:右のセパレーターは先読みです

于 2013-06-02T18:23:10.570 に答える
0

あなたがやろうとしていることを達成する方法の1つの提案:

import re
def change(filename):
    with open(filename) as infile, open("changed.txt", "w") as outfile:
        text = infile.read()
        outfile.write(re.sub(r"\b\w{4}\b", "XXXX", text))

これは、「単語」が英数字以外の文字で囲まれた 4 つの英数字のシーケンスであると (単純化して) 想定しています。それが十分に具体的でない場合 (それは にも一致2001し、一致せずböse、 に変化they'reXXXX'reます)、私に知らせてください。

主な作業は正規表現によって行われます。これは、「単語境界、次に 4 つの英数字、次に単語境界に\b\w{4}\b一致する」ことを意味します。

于 2013-06-02T18:23:46.640 に答える