删除标点符号和大写字母时遇到问题? (初学者)

时间:2011-11-14 03:10:17

标签: 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]

3 个答案:

答案 0 :(得分:2)

首先,您的main没有按照您的意愿行事。请注意for循环的作用:首先,您一次读取一行,然后将每行中的单词列表分配给words。但是你一遍又一遍地覆盖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

由于它的作业,我不愿意放弃代码。否则你将无法学习它。如果再次卡住,请说些什么。

答案 1 :(得分:1)

删除标点符号

一个选项是正则表达式模块的re.sub函数。在这种情况下,我将删除所有不是字母数字或空格的字符。

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

小写

字符串对象的直接下位函数。

>>> 'Its ok'.lower()
its ok

答案 2 :(得分:0)

这实际上可以在一行中完成(提示,打开,读取,拆分,剥离和降低列表补偿):

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

然后打印统计数据:

print "Word count: %d" % len(words)
for p in sorted(words):
    print %s --> %s" % (p, words[p])

或者,长(呃):

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]
相关问题