如何按单词数量对文件行排序并按词长排序行内单词?
问题解析与修正代码
你的代码存在几个关键问题,导致无法实现需求:
- 语法错误:
with语句同时打开多个文件时,只需写一次with,不需要重复声明 - 读写流搞反:应该从
file_in读取内容,向file_out写入,你代码里的读写对象完全颠倒了 - 单词处理逻辑错误:你写的
''.join(sorted(w))是把单词的字母打乱重排,但需求是按单词的字母数量排序,不是修改单词本身 - 行排序键错误:用
len作为排序键会按字符串的字符长度排序,而我们需要按每行的单词数量排序,得用单词数作为判断依据
修正后的代码
with open('input.txt', 'r') as file_in, open('output.txt', 'w') as file_out: # 读取输入文件的所有行,过滤空行并去除换行符 raw_lines = [line.strip() for line in file_in if line.strip()] # 第一步:处理每行,将行内单词按字母数量排序 processed_lines = [] for line in raw_lines: words = line.split() # 按单词的字母长度排序,长度相同则保留原顺序 sorted_words = sorted(words, key=lambda word: len(word)) processed_lines.append(' '.join(sorted_words)) # 第二步:按每行的单词数量对所有行排序 final_lines = sorted(processed_lines, key=lambda line: len(line.split())) # 将结果写入输出文件 file_out.write('\n'.join(final_lines))
代码说明
- 读取文件:用列表推导式读取所有非空行,避免处理无效的空内容
- 行内单词排序:通过
lambda word: len(word)指定排序键为单词的字母数量,实现单词按长度排序 - 行排序:用
lambda line: len(line.split())计算每行的单词数,以此为键对所有行排序 - 写入结果:把排序后的所有行用换行符连接,一次性写入输出文件
最终输出示例
针对你提供的输入内容,输出文件的内容会是:
I my was foe with angry I my was with angry friend I my it not did told grow wrath I my my did end told wrath wrath
内容的提问来源于stack exchange,提问作者ddcrunk
相关产品推荐
相关产品推荐

