You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何依据wds.txt每行单词数重排num.txt的数字内容?

实现思路

  1. 先读取wds.txt,逐行统计每行的单词个数,得到行数对应的长度序列
  2. 读取num.txt的所有数字,存为一维列表
  3. 按长度序列逐段截取数字列表,每段拼接为一行后输出到新文件

纯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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:04