寻找独特的单词及其计数

2024-10-03 19:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是否可以将字符串转换为小写字母,而不在下面代码中的“单词”上运行循环

class TextFileHandeling:
        def __init__(self,path,mode):
           self.path=path
           self.mode=mode


    def reading_file(self):
        file_read= open(self.path,self.mode)
        lines=file_read.read() 
        words=lines.split()   #split strings into words
        return words
        file_read.close()      


    def writing_file(self,words):
        unique=[]
        file_write= open(self.path,self.mode)
        small_letters=[]

        **for i in words:
            small_letters.append(i.lower())**

        for j in small_letters:
            if j not in unique:
                unique.append(j)
                file_write.write(f"{str(j)} {small_letters.count(j)}\n")
        return file_write
        file_write.close()

read_file=TextFileHandeling('D:\\python_practise\\read.txt','r')
write_file=TextFileHandeling('D:\\python_practise\\reader.txt','w')

words= read_file.reading_file()
write_file.writing_file(words)

Tags: pathinselfreadmodedefopenfile
3条回答

您已经在small_letter列表上循环,所以为什么不在循环中只将单词转换为小写字母呢

for word in words:
    if word.lower() not in unique:
        pass

此外,我不知道在列表中没有循环的情况下,单词的大小写是否较低

这应该能很好地发挥作用:

from collections import Counter
from string import ascii_letters

with open('somefile.txt') as fin :
    text = fin.read()    # add .lower() if you need lower case only

# filter out the puctuation
filtered = [t if t in ascii_letters else ' ' for t in text.lower()]

Counter(filtered.split())

首先,如果在return语句之后有return子句,则不会关闭文件,因此

   def reading_file(self):
        file_read= open(self.path,self.mode)
        lines=file_read.read() 
        words=lines.split()  
        return words
        file_read.close() 

必须成为:

 def reading_file(self):
        file_read= open(self.path,self.mode)
        lines=file_read.read() 
        words=lines.split()  
        file_read.close() 
        return words

我还建议您更改get_words中函数的名称,因为函数的真正功能是给您列出的单词,而不是读取文件

要将所有单词放低,请使用功能图:

def my_lower(str_in):
    return str_in.lower()
small_letters = map(my_lower, words)

此外,由于它看起来像是作为集合使用唯一性,因此,如果已经编写了一些东西,则可以使用它,考虑更改集合中唯一的数据结构。在这里您可以找到集合的文档:

https://docs.python.org/2/library/sets.html

相关问题 更多 >