我正在尝试使用Python3计算一个单词在.txt文件中出现的次数

我正在尝试使用Python3计算一个单词在.txt文件中出现的次数,python,string,python-3.x,Python,String,Python 3.x,我试图计算一个单词在txt文件中出现的次数。这个程序似乎可以运行,但是我不能停止计算我认为是空白的部分(我的结果中的60,这是没有意义的,因为有60多个空格)。有没有一种方法可以从字里行间剥离出来 import string words = {} def unique_words2(filename): strip = string.whitespace + string.punctuation + string.digits + "\"'" for line in open

我试图计算一个单词在txt文件中出现的次数。这个程序似乎可以运行,但是我不能停止计算我认为是空白的部分(我的结果中的60,这是没有意义的,因为有60多个空格)。有没有一种方法可以从字里行间剥离出来

import string

words = {}

def unique_words2(filename):
    strip = string.whitespace + string.punctuation + string.digits + "\"'"
    for line in open(filename):
        for word in line.lower().split():
            if word == " ":
                continue
            else:
                word = word.strip(strip)
                words[word] = words.get(word, 0) + 1
    for word in sorted(words):
        print("{0} {1}".format(word, words[word]))

unique_words2("alice.txt")
前5个结果显示:

 60
a 627
a--i'm 1
a-piece 1
abide 1

我希望消除像1、3和4这样的结果。

python字符串的
strip
方法只从字符串的开头和结尾删除指定的字符。使用
translate
方法可以解决这个问题。(这是产出3和4的原因)。输出1是由另一个问题引起的。如果出现一个完全由
strip
中的字符组成的单词,它将包含在单词词典的空字符串下

调整代码:

import string
def unique_words2(filename):
    words = {}
    strip = string.whitespace + string.punctuation + string.digits + "\"'"
    translation = {ord(bad):None for bad in strip} 
    for line in open(filename):
        for word in line.lower().split():
             word = word.translate(translation)
             if word:
                 words[word] = words.get(word, 0) + 1
    for word in sorted(words):
        print("{0} {1}".format(word, words[word]))

unique_words2("alice.txt")
发件人:

单词由任意的空白字符字符串(空格、制表符、换行符、回车符、换行符)分隔

用空格替换任何其他分隔符,如“-”,应该可以做到这一点。无需考虑重复的空间,因为它们将被视为单个空间

def unique_words2(filename):
    strip = string.whitespace + string.punctuation + string.digits + "\"'"
    for line in open(filename):
        separators = '-_|'
        for sep in seperators:
            line = line.replace(sep, ' ')

        for word in line.lower().split():
            word = word.strip(strip)
            if word:
                words[word] = words.get(word, 0) + 1
    for word in sorted(words):
        print("{0} {1}".format(word, words[word]))

这与
urllib
有什么关系?我去掉了那个标签。此外,您还可以使用
re
模块替换不需要的字符。谢谢您的帮助!
def unique_words2(filename):
    strip = string.whitespace + string.punctuation + string.digits + "\"'"
    for line in open(filename):
        separators = '-_|'
        for sep in seperators:
            line = line.replace(sep, ' ')

        for word in line.lower().split():
            word = word.strip(strip)
            if word:
                words[word] = words.get(word, 0) + 1
    for word in sorted(words):
        print("{0} {1}".format(word, words[word]))