鱼C论坛

 找回密码
 立即注册
查看: 2017|回复: 2

[已解决]根据给定的文本文件 words.txt(可将该文件存放在任意目录,注意打开文件 时要加入...

[复制链接]
发表于 2023-4-24 21:10:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
根据给定的文本文件 words.txt(可将该文件存放在任意目录,注意打开文件
时要加入正确的路径)编写函数 loadWords(),words.txt 包含若干小写英文 单词。要求:
1)读入该文件,统计并输出单词的个数
2)                返回单词列表(注意:只返回单词列表即可,不要在屏幕上显示, 因为文件很大,在屏幕上显示会花很长时间)

代码:
import re
def count_words(text):
    with open('D:/Desktop桌面/words.txt') as file:
        text = file.read()
        words = re.findall(r'[a-zA-Z]+', text)        #这一步是啥意思? re模块的使用中,没找到'[a-zA-Z]+'的含义
        count = len(words)
        return count
print(count_words('D:/Desktop桌面'))





words.txt文件内容:
Very quietly I take my leave
As quietly as I came here;

Quietly I wave good-bye

To the rosy clouds in the western sky. The golden willows by the riverside Are young brides in the setting sun;
Their reflections on the shimmering waves Always linger in the depth of my heart.
The floating heart growing in the sludge Sways leisurely under the water;
In the gentle waves of Cambridge I would be a water plant!
That pool under the shade of elm trees

Holds not water but the rainbow from the sky; Shattered to pieces among the duckweeds
Is the sediment of a rainbow-like dream?

To seek a dream? Just to pole a boat upstream To where the green grass is more verdant;
Or to have the boat fully loaded with starlight And sing aloud in the splendor of starlight.
But I cannot sing aloud

Quietness is my farewell music;

Even summer insects heap silence for me Silent is Cambridge tonight!
最佳答案
2023-4-24 21:13:33
您的代码目前是用于计算并输出 words.txt 文件中单词的个数。代码中的 `re.findall(r'[a-zA-Z]+', text)` 表示找出所有由大小写字母组成的单词。`[a-zA-Z]` 表示任意一个大小写字母,`+` 表示至少出现一次。所以这个正则表达式将匹配到文本中所有大小写字母组成的单词。这段代码不完全符合题目要求,需要稍作修改。这里是符合要求的代码:
import re

def loadWords(file_path):
    with open(file_path, 'r') as file:
        text = file.read()
        words = re.findall(r'[a-z]+', text.lower())
        print(f"单词的个数: {len(words)}")
        return words

words_list = loadWords('D:/Desktop桌面/words.txt')

代码中的 `re.findall(r'[a-z]+', text.lower())` 只查找小写字母的单词,并将文本全部转为小写,以满足题目要求。此外,函数名称从 `count_words` 更改为 `loadWords`,并接收文件路径作为参数,使其更符合题目要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-24 21:11:47 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-4-24 21:12 编辑
import re

def loadWords():
    with open("path/to/words.txt", 'r') as f:
        text = f.read()
        words = re.findall(r'[a-zA-Z]+', text)
        count = len(words)
        return words
        # return count, words     # 如果需要返回单词个数,可以改为这样

wordList = loadWords()
print(len(wordList))   # 输出单词个数
解释:
re.findall(r'[a-zA-Z]+', text) 的意思是查找所有由英文字母(大小写)组成的单词。正则表达式中的 [] 是字符集合,方括号中的 a-zA-Z 表示匹配所有英文字符,加上无限次重复符号 + 表示匹配前面出现的英文字符一次或多次。

函数 loadWords() 中用 with open 语句打开文件,Python 会自动在块结束时关闭文件。read() 方法将整个文本读入一个字符串 text 中。findall() 方法使用正则表达式,在 text 中查找符合要求的单词,返回一个单词列表。最后返回单词列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-24 21:13:33 | 显示全部楼层    本楼为最佳答案   
您的代码目前是用于计算并输出 words.txt 文件中单词的个数。代码中的 `re.findall(r'[a-zA-Z]+', text)` 表示找出所有由大小写字母组成的单词。`[a-zA-Z]` 表示任意一个大小写字母,`+` 表示至少出现一次。所以这个正则表达式将匹配到文本中所有大小写字母组成的单词。这段代码不完全符合题目要求,需要稍作修改。这里是符合要求的代码:
import re

def loadWords(file_path):
    with open(file_path, 'r') as file:
        text = file.read()
        words = re.findall(r'[a-z]+', text.lower())
        print(f"单词的个数: {len(words)}")
        return words

words_list = loadWords('D:/Desktop桌面/words.txt')

代码中的 `re.findall(r'[a-z]+', text.lower())` 只查找小写字母的单词,并将文本全部转为小写,以满足题目要求。此外,函数名称从 `count_words` 更改为 `loadWords`,并接收文件路径作为参数,使其更符合题目要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表