删除标点符号和大写字母有困难吗?(初学者)

2024-05-17 07:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

糟糕的程序员。对于课堂作业,我必须从文本文档中提取单词,数数并排序。我在删除标点符号和用小写字母替换大写字母时遇到了困难。任何指导都将不胜感激。在

docwords={}
doc=raw_input("Please enter the name of a text file: ")
docread=open(doc, 'r')
doclist=[]



def main():
    for x in docread:
        words = x.split()
    for word in words:
        doclist.append(word)

def wordcount():
    main()
    for counter in doclist:
        docwords[counter] = docwords.get(counter,0) + 1

wordcount()
docread.close()
for p in sorted(docwords):
    print p, "-->", docwords[p]

Tags: infordocmaindefcounter文本文档wordcount
3条回答

删除标点

一个选项是正则表达式模块的re.sub公司功能。在本例中,我将删除所有非字母数字或空格的字符。在

import re
s = "It's ok"
print re.sub('[^\w ]','',s)
Its ok

小写

字符串对象的一个直接向下的函数。在

^{pr2}$

所有这些都可以在一行中完成(提示、打开、读取、拆分、剥离和降低列表比较):

words = [word.strip("!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~").lower() for word in open(raw_input("Please enter the name of a text file: ").strip(), 'r').read().replace("'", "").split()]

然后打印统计信息:

^{pr2}$

或者,长(er):

docwords={}
doc=raw_input("Please enter the name of a text file: ")
docread=open(doc, 'r')
doclist=[]

def main():

    for x in docread:
        doclist.extend([word.strip("!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~").replace("'", "").lower() for word in x.split()])

def wordcount():
    main()
    for counter in doclist:
        docwords[counter] = docwords.get(counter,0) + 1

wordcount()
docread.close()
for p in sorted(docwords):
    print p, " >", docwords[p]

首先,您的main没有做您想要的。注意for循环的作用:首先,一次读一行,然后将每行中的单词列表分配给words。但是您已经一次又一次地重写words,所以现在{}是最后一行中的单词列表。现在,将这些单词放入doclist。首先考虑如何进行循环嵌套并修复此部分:

def main():
    for x in docread:
        words = x.split()
    for word in words:
        doclist.append(word)

现在,我们可以继续你丢失的部分。Python有很多有用的库。要将字符串小写,请尝试在此处查找:http://docs.python.org/library/stdtypes.html#str.lower。为了消除标点符号,您可能会发现此函数有助于确定字符是否为字母:http://docs.python.org/library/stdtypes.html#str.isalpha。在

既然是作业,我就犹豫要不要把代码泄露出去。否则你就学不到了。如果你再被困住了就说点什么。在

相关问题 更多 >