这里可怕的程序员。对于课堂作业,我必须从文本文档中获取单词,对它们进行计数,然后对它们进行排序。我无法删除标点符号并用较低的标点替换大写字母。任何指导都将不胜感激。
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]
答案 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]