Skip to main content
 首页 » 编程设计

python之按数据组从文件中改组文本

2025年05月04日20JeffreyZhao

我一直在寻找 Python/Unix 命令中的一些方法,通过基于第一个单词值的分组来洗牌文本的大型数据集,如下所示-

输入文本:

"ABC", 21, 15, 45 
"DEF", 35, 3, 35 
"DEF", 124, 33, 5 
"QQQ" , 43, 54, 35 
"XZZ", 43, 35 , 32 
"XZZ", 45 , 35, 32 

所以它会被随机洗牌,但像下面这样将组保持在一起

输出样本-

"QQQ" , 43, 54, 35   
"XZZ", 43, 35 , 32 
"XZZ", 45 , 35, 32 
"ABC", 21, 15, 45 
"DEF", 35, 3, 35 
"DEF", 124, 33, 5 

我通过正常的洗牌找到了解决方案,但我没有想到在洗牌时保持小组。

请您参考如下方法:

可以使用 collections.defaultdict 来做到这一点.通过按第一个序列识别每一行,您可以轻松地对它们进行排序,然后仅对字典的键进行采样,如下所示:

import random 
from collections import defaultdict 
 
# Read all the lines from the file 
lines = defaultdict(list) 
with open("/path/to/file", "r") as in_file: 
    for line in in_file: 
        s_line = line.split(",") 
        lines[s_line[0]].append(line) 
 
# Randomize the order 
rnd_keys = random.sample(lines.keys(), len(lines)) 
 
# Write back to the file? 
with open("/path/to/file", "w") as out_file: 
    for k in rnd_keys: 
        for line in lines[k]: 
            out_file.write(line) 

希望这对您的努力有所帮助。