1

一言で言えば、行内の単語内の句読点をスペースに置き換えようとしています。

たとえば、テキスト doc 出力は、一度処理されると、このように句読点がなくなります。

ミープミープ!私はパテをたたくと思います。やった やった パテをたべた Shsssssssssh 私はワビットを狩っています へへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへへ ワビット狩りの季節をやめてください

無改造だとこんな感じ。

question5.txt からのテキスト

ミープミープ!私はパテをたたくと思います。やった!やった!私はパテをたたきました。シッスッスッ… ワビットを狩ってる。へへへへへへへ… ワビットを狩るにはいい日です!... へへへへへ... ストップ - ワビット狩りの季節です! Huntin Wabbits: wabbit をクックする 101 通りの最終ガイド。

これは演習なので、.replace と for ループを使用するように言われました。

import string
infile = open('question5.txt', 'r')

lines = infile.readlines()
lines = str(lines)
for words in lines:
    for letters in words:
        letters.replace(string.punctuation,' ')
        print(letters)

問題を解決するための支援をいただければ幸いです。

あなたの提案といくつかの調査の後、誰かが結果に従っていた場合、私はこれでさらに何時間も経った後に終わったことに注意してください。みんなありがとう

import string
infile = open('question5.txt', 'r')
lines = infile.readlines()

def word_count(list):
    count = 0
    list = str(list)
    for lines in list:
        list = list.replace('.',' ')
        list = list.replace(',',' ')
        list = list.replace('-',' ')

    split = list.split()
    print (split)
    for words in split:
        count = count + 1
    return count


for line in lines:
    count = word_count(line)
    print(count)
infile.close()
4

3 に答える 3

1

まず、 elyaseが示すように、コンストラクトを使用するwithか、最後にファイルを閉じる必要があります。また、彼が示しているように、テキスト ファイルを読み取ってその場で処理する場合は、決して.readlines(). ファイル オブジェクトの内容を for ループするだけです。行ごとに繰り返されます(末尾の を含む\n)。

もう 1 つの問題はlines = str(lines)です。実際、 yourlinesは最初は文字列のリストです。はstr、それを のような単一の文字列に変換します"['Meep...', 'wabits...', 'huntin...']"。最初にその文字列をループしています-単一の文字を取得します(単一文字の文字列として)。名前を付けwordsても現実は変わりません。(どうしても単語を外に出したい場合は、 のようなものを使用する必要がありますfor word in line.split():。)

次に、単一の文字を 2 回ループします。単一の文字を再度取得します (つまり、ループは 1 回だけ回転し、機能は追加されません)。

次に、.replace() は replacement の結果を返しますが、引数は変更しません。結果を変数に代入したいとします。とにかく、string.punctuation元のテキストには見つからないため、古い文字列を置き換えることはできません。ブルート フォース ソリューションでは、句読点文字列をループ処理して、個々の文字を置換する必要があります。

要約すると、lettersまだ単一の文字が含まれており、代替はありません。そして、単一の文字を出力します。関数はprint改行を追加します。このようにして、中国語の方法で書かれた文字列/行のリストの文字列表現としてレンダリングされた元のコンテンツを見ることができます - 単一の列の上/下。

最後に、the string.punctuation単なる文字列定数です。

>>> import string
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

モジュールをインポートしないことでコードを簡素化しstring(指示されていない場合)、句読点と見なすべき文字を含む独自の文字列リテラルを使用できます。

于 2013-05-27T09:35:09.650 に答える