python3 分割文件,将大文件按行分割成最大某M的小文件

本文档介绍了如何使用Python实现配置文件的初次生成与后续读取,包括配置变量的管理、文件预处理步骤和大文件分割操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次运行,自动生成配置文件

第二次运行,自动读取配置文件

import os,json,platform
from uuid import uuid1

from u_工具 import 配置,打点,计时,序号,序号_重置


print("———— 开始 ————")
打点()

# region 1.用来配置的变量
config = {
    "输入目录": "./a_输入",
    "输出目录": "./b_输出",
    "小文件大小": 50   # 单位 M
}

config_filePath = "./配置文件2.json"
关联表 = {
    "输入目录":"输入目录",
    "输出目录":"输出目录",
    "小文件大小":"小文件大小",
}
if os.path.exists(config_filePath):
    配置.加载(config_filePath).关联(config,关联表).重载()
else:
    if not os.path.dirname(config_filePath):
        os.makedirs(os.path.dirname(config_filePath))
    with open(config_filePath, 'w', encoding='utf-8') as f:
        json.dump(config, f, ensure_ascii=False, indent=2)

# endregion


# region 2.预处理
# 调整小文件大小 扩充到M
config['小文件大小'] = int(config['小文件大小']) * 1024 * 1024

# 目录不存在就手动建立
if not os.path.exists(config['输出目录']):
    os.makedirs(config['输出目录'])

# 获取待去重文件
if not os.path.exists(config['输入目录']):
    os.makedirs(config['输入目录'])
if os.path.isdir(config['输入目录']):
    待去重文件列表 = [f"{config['输入目录']}/{i}" for i in os.listdir(config['输入目录']) if not os.path.isdir(f"{config['输入目录']}/{i}")]
else:
    待去重文件列表 = [config['输入目录']]
print(f"总共{len(待去重文件列表)}个文件")
print(待去重文件列表)

换行符 = b"\n"
if platform.system().lower() == 'windows':
    换行符 = b"\r\n"

# endregion


# region 3.实际处理

# (1)分割大文件
打点()
待排序文件列表 = []
待补全数据 = b""
for 文件 in 待去重文件列表:
    序号_重置(1)
    with open(文件, 'rb') as f:
        文件名 = os.path.basename(文件).split(".")[0]

        buf = f.read(config['小文件大小'])
        while buf:
            data = buf.split(换行符,1)
            新路径 = f"{config['输出目录']}/{文件名}_{序号('1').zfill(2)}_{uuid1()}.txt"
            with open(新路径, 'ab') as ff:
                ff.write(待补全数据 + data[0])
            待排序文件列表.append(新路径)
            try:
                待补全数据 = data[1]
            except:
                待补全数据 = b""
            buf = f.read(config['小文件大小'])
    新路径 = f"{config['输出目录']}/{文件名}_{序号('1').zfill(2)}_{uuid1()}.txt"
    with open(新路径, 'ab') as ff:
        ff.write(待补全数据 + 换行符)
    待排序文件列表.append(新路径)
    待补全数据 = b""
buf,data,待补全数据=None,None,None

打点()
print(f"\n分割大文件完成,共耗时:{计时()}")
print(f"\n输出目录:{config['输出目录']}")

# endregion


打点()
print(f"\n\n总耗时:{计时(0)}")
print("———— 结束 ————")
print()
os.system('pause')

 

 

工具类:

配置:https://blog.youkuaiyun.com/u013595395/article/details/109172429

打点计时:https://blog.youkuaiyun.com/u013595395/article/details/108763819

序号:https://blog.youkuaiyun.com/u013595395/article/details/108740323

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值