吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3178|回复: 20
上一主题 下一主题
收起左侧

[Python 原创] TXT批量文本分割器Python

  [复制链接]
跳转到指定楼层
楼主
darkreg 发表于 2023-5-16 14:48 回帖奖励
本帖最后由 darkreg 于 2023-5-19 20:10 编辑

1.想法介绍
我有30多个大文本文件要批量分割 ,论坛搜了下没有发现批量处理的,就自己动手写个吧



2.软件功能:
1、自动识别当前文件夹下的TXT文件并且分割拆分成100M一个文件(需要分割其他大小和格式 稍微修改下代码即可)
2、不会出现分割后乱码或其他编码问题
3、可单独处理一个大文件也可以批量处理多个大文件
4、文件很小,好操作好保存


 
3.使用效果




[Python] 纯文本查看 复制代码
import os


def split_file(file_path, max_size):
    # 获取文件名和扩展名
    file_dir, file_name = os.path.split(file_path)
    file_base_name, file_ext = os.path.splitext(file_name)

    # 打开源文件
    with open(file_path, 'rb') as source_file:
        # 读取源文件内容
        content = source_file.read()

        # 计算文件大小
        file_size = len(content)

        # 计算拆分文件的数量
        split_count = file_size // max_size + 1

        # 拆分文件
        for i in range(split_count):
            # 构造拆分后的文件名
            split_file_name = f"{file_base_name}_{i}{file_ext}"
            split_file_path = os.path.join(file_dir, split_file_name)

            # 计算当前拆分文件的起始位置和结束位置
            start = i * max_size
            end = (i + 1) * max_size if i < split_count - 1 else file_size

            # 写入拆分文件
            with open(split_file_path, 'wb') as split_file:
                split_file.write(content[start:end])

            print(f"拆分文件 {split_file_name} 创建成功")


# 获取当前文件夹中的文本文件
file_list = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.txt')]

# 拆分每个文本文件
for file_path in file_list:
    split_file(file_path, 100 * 1024 * 1024)  # 拆分为每个文件大小不超过100MB


[Python] 纯文本查看 复制代码
import os


def split_file(file_path, max_size):
    # 获取文件名和扩展名
    file_dir, file_name = os.path.split(file_path)
    file_base_name, file_ext = os.path.splitext(file_name)

    # 打开源文件
    with open(file_path, 'rb') as source_file:
        # 获取文件大小
        file_size = os.path.getsize(file_path)

        # 计算拆分文件的数量
        split_count = file_size // max_size + 1

        # 拆分文件
        for i in range(split_count):
            # 构造拆分后的文件名
            split_file_name = f"{file_base_name}_{i}{file_ext}"
            split_file_path = os.path.join(file_dir, split_file_name)

            # 计算当前拆分文件的起始位置和结束位置
            start = i * max_size
            end = min((i + 1) * max_size, file_size)

            # 写入拆分文件
            with open(split_file_path, 'wb') as split_file:
                with open(file_path, 'rb') as source_file:
                    source_file.seek(start)
                    split_file.write(source_file.read(end - start))

            print(f"拆分文件 {split_file_name} 创建成功")


# 获取指定目录下的指定类型文件
def get_files(directory, file_extension):
    file_list = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(file_extension):
                file_list.append(os.path.join(root, file))
    return file_list


# 拆分每个文本文件
def split_files(directory, file_extension, max_size):
    file_list = get_files(directory, file_extension)
    for file_path in file_list:
        split_file(file_path, max_size)


# 设置参数
directory = '.'  # 当前目录
file_extension = '.txt'  # 文件类型为txt
max_size = 100 * 1024 * 1024  # 拆分文件大小不超过100MB

# 拆分文件
split_files(directory, file_extension, max_size)


第二段适合大文件,如果文件特别大,可以用第二段python代码就不会卡死,使用os.path.getsize(file_path)来获取文件大小,如果处理小文件比如几个G的 那一段代码就可以了

感谢大家 来到吾爱也好久了,赠人玫瑰手有余香,免费评分走走奥~

免费评分

参与人数 8吾爱币 +13 热心值 +8 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
arsleeli + 1 + 1 我很赞同!
kuangxiao + 1 + 1 谢谢@Thanks!
Lemon1001 + 1 + 1 谢谢@Thanks!
SBKK123456 + 1 + 1 我很赞同!
wxn2023 + 1 + 1 我很赞同!
supernox + 1 + 1 我很赞同!
Dedicated + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
law.liu 发表于 2023-5-17 09:23
这段代码存在一些潜在的问题和改进的空间,修改后如下:

代码缺少对所需模块的导入:在代码的开头,import os 被导入,但代码中使用了 os.path 和 os.listdir 等功能,因此还需要导入其他模块,例如 import os.path。

对于大型文件的拆分,读取整个文件内容并将其保存在内存中可能导致内存不足的问题。为了避免这个问题,可以考虑使用逐块读取文件的方式进行拆分。

当拆分文件时,每个拆分文件的命名方式是通过在原始文件名后添加索引来生成的。这可能会导致拆分文件的命名冲突,特别是当相同名称的文件已存在时。可以考虑使用更具体的命名方式,如添加时间戳或随机字符串。

在代码的最后一行中,拆分文件的大小被设置为 100MB。这是一个硬编码的值,可以考虑将其作为函数的参数传递,以便更灵活地指定拆分文件的大小。

缺少错误处理机制:代码没有处理文件读取和写入的潜在异常情况,如文件不存在、权限问题等。可以添加适当的异常处理代码,以增强代码的健壮性。

综上所述,以上是对代码存在的问题和改进空间的分析。根据实际需求和具体情况,你可以根据这些建议来优化和完善代码。

[Python] 纯文本查看 复制代码
import os
import shutil

def split_file(file_path, max_size):
    # 获取文件名和扩展名
    file_dir, file_name = os.path.split(file_path)
    file_base_name, file_ext = os.path.splitext(file_name)

    # 创建拆分文件的目标文件夹
    split_dir = os.path.join(file_dir, file_base_name)
    os.makedirs(split_dir, exist_ok=True)

    # 拆分文件
    with open(file_path, 'rb') as source_file:
        index = 0
        while True:
            # 读取一块数据
            content = source_file.read(max_size)
            if not content:
                break

            # 构造拆分后的文件名
            split_file_name = f"{file_base_name}_{index}{file_ext}"
            split_file_path = os.path.join(split_dir, split_file_name)

            # 写入拆分文件
            with open(split_file_path, 'wb') as split_file:
                split_file.write(content)

            print(f"拆分文件 {split_file_name} 创建成功")
            index += 1

# 获取当前文件夹中的文本文件
file_list = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.txt')]

# 拆分每个文本文件
for file_path in file_list:
    split_file(file_path, 100 * 1024 * 1024)  # 拆分为每个文件大小不超过100MB


在这个改进后的代码中,我使用了shutil模块来创建目标文件夹,这样可以更方便地处理拆分文件的保存路径。另外,我使用了循环逐块读取文件的方式进行拆分,而不是一次性读取整个文件。这样可以避免大文件导致的内存问题。

我还根据拆分后的文件大小使用了一个循环索引index,这样可以在文件名中添加不同的索引,以避免命名冲突。

希望这个改进后的代码能够满足你的需求!如有需要,请随时提出进一步的问题。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
zhangmi008 + 1 + 1 热心回复!
darkreg + 1 + 1 用心讨论,共获提升!

查看全部评分

推荐
 楼主| darkreg 发表于 2023-5-16 15:02 |楼主
有些同学可能没有安装环境,这个是EXE版+python源代码
链接:https://pan.baidu.com/s/1Wiql8fOlYb43AxoFALNEEw?pwd=0jyv
提取码:0jyv
3#
xh1048 发表于 2023-5-16 15:29
我比较对你分割的文本感兴趣,什么文本能有100M
4#
jwzb 发表于 2023-5-16 15:32
darkreg 发表于 2023-5-16 15:02
有些同学可能没有安装环境,这个是EXE版+python源代码
链接:https://pan.baidu.com/s/1Wiql8fOlYb43AxoFA ...

谢谢打包好的成品
5#
supernox 发表于 2023-5-16 15:57
感谢分享打包EXE     很贴心
头像被屏蔽
6#
saszznz 发表于 2023-5-16 15:58
提示: 作者被禁止或删除 内容自动屏蔽
7#
xiuro 发表于 2023-5-16 16:52
100M的文本,对我来说好恐怖。。。
8#
Klock0828 发表于 2023-5-16 17:03
感谢分享
9#
lazhou 发表于 2023-5-16 17:47
软件好用,exe文件要是能方便更改分割大小和分割时进行确认就更人性化了,谢谢分享。
10#
liyulan110 发表于 2023-5-16 17:47
不懂,但一如既往支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表