Python如何依据wds.txt每行单词数重排num.txt的数字内容?
实现思路
- 先读取
wds.txt,逐行统计每行的单词个数,得到行数对应的长度序列 - 读取
num.txt的所有数字,存为一维列表 - 按长度序列逐段截取数字列表,每段拼接为一行后输出到新文件
纯Python实现(无需依赖第三方库)
# 统计wds每行的单词数 with open('wds.txt', 'r', encoding='utf-8') as f: wds_lines = f.readlines() word_counts = [len(line.strip().split()) for line in wds_lines if line.strip()] # 读取所有num的数字 with open('num.txt', 'r', encoding='utf-8') as f: nums = [line.strip() for line in f.readlines() if line.strip()] # 按长度拼接 res = [] start = 0 for cnt in word_counts: end = start + cnt res.append(' '.join(nums[start:end])) start = end # 写入新的num.txt with open('new_num.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(res))
基于Pandas的实现(适配你原有的pandas使用场景)
如果你习惯用pandas处理,可以按以下方式调整代码:
import pandas as pd # 读wds统计词数 wds_df = pd.read_csv('wds.txt', header=None, names=['text']) wds_df['word_cnt'] = wds_df['text'].apply(lambda x: len(str(x).strip().split())) # 读num数据 num_df = pd.read_csv('num.txt', header=None, names=['num']) # 生成分组标记:重复对应词数次的分组ID grp_labels = [] for idx, cnt in enumerate(wds_df['word_cnt']): grp_labels.extend([idx]*cnt) # 取对应长度的标记,和num数据对齐 num_df['grp'] = grp_labels[:len(num_df)] # 分组拼接 res_df = num_df.groupby('grp', sort=False)['num'].agg(' '.join).reset_index(drop=True) # 输出到文件 res_df.to_csv('new_num.txt', header=False, index=False)
注意事项
- 请确保
num.txt的数字总行数 ≥wds.txt所有行的单词总数,否则末尾行会出现缺失 - 输出的
new_num.txt就是符合要求的结果,确认无误后可以替换原num.txt
内容的提问来源于stack exchange,提问作者Samantha World
相关产品推荐
相关产品推荐

