拆分功能分割带有标点符号的单词。想要预防。分割后如何进行Alphabetize?

时间:2016-09-09 00:30:54

标签: python text split

我有两个问题。这是代码:

Read =open("C:\Users\Moondra\Desktop/test1.txt",'r')
text =Read.read()
words =text.split()
print(words)
print(words.sort())

##counts=dict()
##for word in words:
##    counts[word] = counts.get(word,0)+1
##
##
##print counts    

我正在阅读的文字:

test1.txt的

Hello Hello Hello。

一切如何。到底是怎么回事? 你在哪?喂!!

希望很快见到你。

你什么时候来的?

我应该在晚餐时做些什么?

结束!

来自txt文件的文字结尾

我的两个问题如下:

  1. 我正在尝试实现每个单词的计数代码,其中我计算每个单词在文档中出现的次数。 但是,当我使用上面的代码分割单词时,单词“Hello”将显示为“Hello!”,甚至“Hello”。分别。我怎么能避免这个?

  2. 接下来,我尝试按字母顺序对列表中的元素进行排序,但是在运行sort()方法后我获得的所有内容都是none,这让我很困惑。

  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

此代码适用于您所描述的内容:

import re

with open("C:\Users\Moondra\Desktop/test1.txt", 'r') as file:
    file = file.read()

words_list = re.findall(r"[\w]+", file)
words_list = sorted(words_list, key=str.lower)

patterns = ["Hello"]
counter = 0


for word in words_list:
    for pattern in patterns:
        if word == pattern:
            counter+=1

print("The word Hello occurred {0} times".format(counter)) # prints the number of times 'Hello' was found
print(words_list) # prints your list alphabetically

但是您应该注意以下几点:

  • 我使用re模块而不是排序。这是因为在re模块中使用regular expression引擎要比使用split()函数分割字符串要复杂得多。
  • 我将一些变量重命名为遵循PEP8指南和Python的命名约定。您可以根据自己的喜好重新命名。
  • sort() 返回列表的原因是因为列表的sort()属性不返回新列表,而是更改旧列表。也就是说,列表的sort()属性就地排序。您使用的sort()会返回数据类型None。您需要使用内置的Python函数 sorted() sorted()函数返回数据类型list