如何将两个字典写入TXT文件?求助第3、4步Python实现
文本分析任务:文件写入与函数整合解决方案
我看你已经搞定了前两个统计功能的函数,卡在了文件写入和批量调用这两步对吧?别慌,我一步步给你捋清楚怎么修改和实现:
第一步:调整现有函数,让它们返回统计结果
原来的函数直接打印字典,没法把数据传给后续的写入步骤,我们先修改成返回字典,同时用更安全的with语句处理文件:
修改词长统计函数
def make_length_wordcount(filename): # 直接传入完整文件名(比如"nasdaq.txt") with open(filename, 'r') as infile: wordlist = infile.read().split() counter1 = {} for word in wordlist: word_length = len(word) # 用get方法简化计数逻辑,避免if-else判断 counter1[word_length] = counter1.get(word_length, 0) + 1 return counter1 # 返回统计好的字典,而非直接打印
修改词频统计函数
def make_word_count(filename): with open(filename, 'r') as infile: # 读取后直接转小写并拆分单词 words = infile.read().lower().split() word_freq = {} for word in words: word_freq[word] = word_freq.get(word, 0) + 1 return word_freq
第二步:实现analyze_text()函数,完成文件写入
这个函数要整合两个统计函数,生成指定格式的输出文件,并把统计结果写入:
def analyze_text(input_filename, first_name, last_name): # 生成符合要求的输出文件名:比如输入"nasdaq.txt",输出"nasdaq_analyzed_HYUN_KANG.txt" base_name = input_filename.split('.')[0] output_filename = f"{base_name}_analyzed_{first_name.upper()}_{last_name.upper()}.txt" # 调用两个统计函数获取结果 length_count_dict = make_length_wordcount(input_filename) word_freq_dict = make_word_count(input_filename) # 打开输出文件并写入内容 with open(output_filename, 'w') as outfile: # 写入词长-数量统计模块,加标题提升可读性 outfile.write("=== 词长-单词数量统计 ===\n") # 按词长从小到大排序后写入 for length in sorted(length_count_dict.keys()): outfile.write(f"单词长度 {length}: {length_count_dict[length]} 个\n") # 空行分隔两个模块 outfile.write("\n=== 单词出现频率统计 ===\n") # 按出现次数从高到低排序,更直观 for word, count in sorted(word_freq_dict.items(), key=lambda x: x[1], reverse=True): outfile.write(f"{word}: {count} 次\n")
第三步:批量调用函数,生成三个分析文件
在hw2_FIRST_LAST.py(比如hw2_HYUN_KANG.py)的末尾添加调用代码,替换成你自己的名字:
if __name__ == "__main__": # 三次调用,分别处理三个输入文件 analyze_text("nasdaq.txt", "HYUN", "KANG") analyze_text("raven.txt", "HYUN", "KANG") analyze_text("frankenstein.txt", "HYUN", "KANG")
关键知识点说明
with语句:Python处理文件的最佳实践,自动帮你打开和关闭文件,避免手动close可能导致的资源泄漏问题。- 函数返回值:让函数返回字典而非直接打印,才能让统计结果被后续步骤复用,这是模块化编程的基础。
- 排序输出:对统计结果排序后写入,能让生成的分析文件更易读,用户可以快速找到最长/最短单词、高频单词等信息。
内容的提问来源于stack exchange,提问作者haroharo
相关产品推荐
相关产品推荐

