【问题标题】:Split function splitting words with punctuations. Want to prevent. After splitting how to Alphabetize?拆分函数用标点符号拆分单词。想防。拆分后如何按字母顺序排列?
【发布时间】:2016-09-09 00:30:54
【问题描述】:

我有两个问题。代码如下:

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

你好你好你好。

一切都好吗。到底是怎么回事? 你在哪里?你好!!

希望很快见到你。

你什么时候过来?

晚餐我应该做什么?

结束!

txt 文件中的文本结尾

我的两个问题如下:

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

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

谢谢!

【问题讨论】:

标签: python text split


【解决方案1】:

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

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() 函数拆分字符串要简单得多。
  • 我重命名了一些变量,以遵循 Python 的 PEP8 指南和命名约定。随意重命名为您的喜好。
  • sort()之所以返回一个列表,是因为一个列表的sort()属性,并没有返回一个新的列表,而是改变了旧的。也就是说,列表的sort() 属性就地排序。您使用的sort() 返回数据类型None。您需要改用 Python 内置函数 sorted()sorted() 函数返回数据类型list

【讨论】:

  • with 语句打开文件会不会更好,只是为了确保读完后释放内存?
  • 谢谢。我将玩弄代码和重新模块,看看我是否还有其他问题。至于“sort()返回列表的原因,是因为列表的sort()属性,并没有返回一个新的列表,而是改变了旧的。也就是说,一个列表的sort()属性就地排序. 你需要使用内置的 Python 函数 sorted() 代替“我对这个评论有点困惑。 SORT 函数没有返回一个列表,它返回一个 NONE(除非这是一个列表)
  • @moondra 我会看看我是否可以在我的回答中澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2020-06-20
  • 2010-09-26
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多