-2

テキスト ドキュメントを開いて、4 文字の単語すべてを* *に置き換えるプログラムを作成しようとしています。私は今、このプログラムを何時間もいじっています。どこにも行けないようです。誰かがこれで私を助けてくれることを望んでいました。これが私がこれまでに持っているものです。助けていただければ幸いです。

def censor():
    filename = input("Enter name of file: ")
    file = open(filename, 'r')
    file1 = open(filename, 'w')
    for element in file:
        words = element.split()
        if len(words) == 4:
            file1 = element.replace(words, "xxxx")
            alist.append(bob)
        print (file)
    file.close()

これは改訂版です。これがはるかに優れているかどうかはわかりません

def censor():
    filename = input("Enter name of file: ")
    file = open(filename, 'r')
    file1 = open(filename, 'w')
    i = 0
    for element in file:
        words = element.split()
        for i in range(len(words)):
            if len(words[i]) == 4:
                file1 = element.replace(i, "xxxx")
                i = i+1
    file.close()
4

4 に答える 4

2
for element in file:
    words = element.split()
    for word in words:
        if len(word) == 4:
            etc etc

理由は次のとおりです。

element = 'hello, my name is john' ファイルの最初の行が 'hello, my name is john' で、ループの最初の反復であるとします。words = ['hello,','my','name','is','john']

したがって、各単語の内容を確認する必要がありますfor word in words

また、現在の方法では句読点に注意を払っていないことにも注意してください。上記の最初の単語に注意してくださいwords...

句読点を取り除くには、次のように言います。

import string

blah blah blah ...
for word in words:
    cleaned_word = word.strip(string.punctuation)
    if len(cleaned_word) == 4:
       etc etc
于 2012-11-08T07:22:58.703 に答える
1

ここにヒントがあります:len(words)特定の単語の長さではなく、現在の行の単語数を返します。行のすべての単語を調べて、置換する必要があるかどうかを判断するコードを追加する必要があります。

また、ファイルが単語の単純なリストよりも複雑な場合 (たとえば、保持する必要のある句読点が含まれている場合)、正規表現を使用して作業を行う価値がある場合があります。

于 2012-11-08T07:19:03.117 に答える
0

次のようになります。

def censor():
    filename = input("Enter name of file: ")
    with open(filename, 'r') as f:
        lines = f.readlines()

    newLines = []
    for line in lines:
        words = line.split()
        for i, word in enumerate(words):
            if len(word) == 4:
                words[i] == '**'
        newLines.append(' '.join(words))

    with open(filename, 'w') as f:
        for line in newLines:
            f.write(line + '\n')
于 2012-11-08T07:22:25.603 に答える