1

ファイルを開き、ファイル内のすべての文字を小文字にし、句読点をすべて削除する方法を見つけようとしています。オンラインや本で見たいくつかのことを試しましたが、理解できないようです.

import string

def ReadFile(Filename):
    try:
        F = open(Filename)
        F2=F.read()
    except IOError:
        print("Can't open file:",Filename)
        return []
    F3=[]
    for word in F2:
        F3=F2.lower()
    exclude = set(string.punctuation)
    F3= ''.join(ch for ch in F3 if ch not in exclude)
    return F3







Name = input ('Name of file? ')
Words = ReadFile(Name)
print (F3)

次のような文を考えると、

Then he said, "I'm so confused!".

なるために

then he said im so confused
4

2 に答える 2

2

コードの問題は最後の行にあります。

print (F3)

F3関数内のローカル変数の名前でした。ここからはアクセスできません。

ただし、その変数にあった同じ値にアクセスできます。これは、関数がそれを返し、それを に保存したためですWords

だから、これをしてください:

print(Words)

これで、コードが機能します。


とは言え、改善可能です。

最も重要なことは、次の部分を見てください。

F3=[]
for word in F2:
    F3=F2.lower()

は実際には のすべての文字for word in F2:ループします。これは、文字列がそのように機能するためです。単語ごとに行きたい場合は、次のようにする必要がありますF2for word in F2.split():

一方、ループ内では、ループF3を通過するたびに再割り当てを行い、以前の値で何もしないため、最後の割り当てを行うだけの非常に凝った (そして遅い) 方法になります。

幸いなことに、最後の代入はF3=F2.lower()文字列全体を小文字にしますF2。これはまさにあなたがやりたかったことなので、とにかくうまくいきます。つまり、これら 3 行すべてを次のように置き換えることができます。

F3=F2.lower()

また、開いたファイルは常に閉じる必要があります。これは注意が必要な場合があるため (たとえば、関数では、成功した場合とエラーの場合の両方で閉じることを忘れないようにする必要があります)、それを行う最善の方法は、with句を使用して自動的に行うことです。次の 2 行を置き換えます。

F = open(Filename)
F2=F.read()

と:

with open(Filename) as F:
    F2=F.read()

その後、PEP-8 以外のスタイルを使用することと、巨大なファイルがある場合のパフォーマンスの問題を除けば、コードに問題はありません。

于 2013-04-24T18:59:32.523 に答える
0

このトピックについては多くの議論がありますが、シンプルで効果的な方法は次のとおりです。

s="Then he said, \"I\'m so confused!\"." 
s.translate(string.maketrans("",""), string.punctuation)

同様の議論はここで見つけることができます:

Unicode 形式の文字列から句読点を削除する

Python 正規表現句読点認識

Python で文字列から句読点を削除する最良の方法

于 2013-04-24T19:11:19.063 に答える