计数文件中字符数的功能方法是什么?
如果可能的话,我想避免使用任何模块。由于我的技术局限性和要求,需要进行尽可能多的优化-包括省略模块,因为在我的情况下,它们需要花费太多时间来加载(即使加载时间很短)。谢谢!
答案 0 :(得分:3)
嗯,这实际上很容易做到。首先,我将介绍计数单词(可以与文件或字符串一起使用,但出于目的,我将对文件中的单词进行计数)。
我们假装这是我们文件ourfile.txt
的内容:
Hello. This is a file.
Not the most exciting file.
Just be glad it isn't lorem ipsum.
让我们先定义功能并从文本文件中读取内容:
def countWordsFile(file):
with open(file) as f:
query = file.read()
太好了,现在我们有了文件的内容!接下来,我们将定义一个名为n_split
的新变量。此变量将在每个\n
处分割字符串。但是发生的是当我们有换行符时,它可以生成空列表值。因此,我们使用一个简单的filter
函数来删除空列表值:
n_split = list(filter(None, query.split('\n')))
# Splits at every \n, and removes empty list values caused by line breaks
当我们删除所有空白列表项时,n_split
现在看起来像这样:
['Hello. This is a file.', 'Not the most exciting file.', 'Just be glad it isn't lorem ipsum.']
为了进行比较,如果我们没有删除空列表项,则n_split
看起来像这样:
['Hello. This is a file.', '', 'Not the most exciting file.', 'Just be glad it isn't lorem ipsum.']
...由于文件中包含该换行符。这只是一个好功能,因此我们可以减少出错的可能性。
现在,我们的变量n_split
包含文件中的每个段落,没有任何空列表项。接下来是将每个段落分成每个单词。为此,我们可以简单地遍历n_split
中的每个项目并将其在空格处分割:
words = []
for i in n_split:
words.append(i.split(' '))
但是我们还有最后一步。看到了,因为我们拆分了列表中已经存在的每个列表项,所以实际上我们有了一个列表,其中包含每个段落每个单词的单独列表。因此,我们只需要将它们合并为一个更大的列表。我们可以为此使用一个简单的列表理解表达式(credit)。我们可以找到此生成列表的len
,而仅return
:
return len([x for y in words for x in y])
现在,我们可以随时通过调用print(countWordsFile('ourfile.txt'))
来访问该值并获取输出:
17
文件中的确切字数!我们已经实现了目标。实际上,获取字符串中的字符数非常简单:只需调用len(string)
。使用len
是一把双刃剑:它可以返回列表的长度或字符串的长度。总结起来,我相信这是一种非常简单且简单的方法,能够对字符串或文件中的字符或单词进行计数。希望您从本指南中学到了什么!