victory的博客

长安一片月,万户捣衣声

0%

python | 分块拆分txt文件中的数据

分块拆分txt文件中的数据

代码:

# -*- coding:utf-8 -*-
# 读取txt文件中的数据
file = open("数据.txt")
lines = file.readlines()
# print(lines[:5])

data = {}  # 储存分割的数据
line_list = []  # 中转列表
last_id = "start"  # 数据分块标识
for line in lines:
    row_data = line.split(" ")  # 将一行数据按空格分隔
    ID = row_data[0]  # 获得ID
    if last_id == "start":  # 用于处理数据第一行
        line_list.append(line)  # 将第一行数据放入中转列表
    else:  # 不是第一行数据,则按如下执行
        if ID != last_id:  # 如果出现新的数据块
            if last_id in data:  # 新的数据块的ID已存在字典data中
                data[last_id].append(line_list)  # 将中转列表的数据添加到对应的ID中
            else:  # 新的数据快的ID不在字典data中
                data[last_id] = [line_list]  # 将上一个数据块加入对应的ID
            line_list = [line]  # 将中转列表清空,并放入新数据快的第一行数据
        else:  # 没出现新的数据块
            line_list.append(line)  # 将数据继续加入中转列表
    last_id = ID  # 每处理一行,将分块标识last_id更行为最新的ID

# 将最后一个文字块的数据放入字典
if last_id in data:
    data[last_id].append(line_list)
else:
    data[last_id] = [line_list]

# print(data['89031'])

# for i in data.keys():
#     for block in data[i]:
#         print(block)
#         print("- -"*50)


# 写入数据函数
def to_txt(filename, data_list):  # filename为写入文件的名字,data为要写入数据列表
    file = open("分块\\" + filename + '.txt', 'a')
    for i in range(len(data_list)):
        file.write(data_list[i])
    file.close()  # 保存数据并关闭


# 批量写入数据
for ID in data.keys():
    for i in range(len(data[ID])):
        to_txt(f"{ID}_{i+1}", data[ID][i])
        

数据.txt