TXT批量文本分割器Python
本帖最后由 darkreg 于 2023-5-19 20:10 编辑1.想法介绍
我有30多个大文本文件要批量分割 ,论坛搜了下没有发现批量处理的,就自己动手写个吧
2.软件功能:
1、自动识别当前文件夹下的TXT文件并且分割拆分成100M一个文件(需要分割其他大小和格式 稍微修改下代码即可)
2、不会出现分割后乱码或其他编码问题
3、可单独处理一个大文件也可以批量处理多个大文件
4、文件很小,好操作好保存
3.使用效果
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)
print(f"拆分文件 {split_file_name} 创建成功")
# 获取当前文件夹中的文本文件
file_list =
# 拆分每个文本文件
for file_path in file_list:
split_file(file_path, 100 * 1024 * 1024)# 拆分为每个文件大小不超过100MB
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的 那一段代码就可以了
感谢大家 来到吾爱也好久了,赠人玫瑰手有余香,免费评分走走奥~
这段代码存在一些潜在的问题和改进的空间,修改后如下:
代码缺少对所需模块的导入:在代码的开头,import os 被导入,但代码中使用了 os.path 和 os.listdir 等功能,因此还需要导入其他模块,例如 import os.path。
对于大型文件的拆分,读取整个文件内容并将其保存在内存中可能导致内存不足的问题。为了避免这个问题,可以考虑使用逐块读取文件的方式进行拆分。
当拆分文件时,每个拆分文件的命名方式是通过在原始文件名后添加索引来生成的。这可能会导致拆分文件的命名冲突,特别是当相同名称的文件已存在时。可以考虑使用更具体的命名方式,如添加时间戳或随机字符串。
在代码的最后一行中,拆分文件的大小被设置为 100MB。这是一个硬编码的值,可以考虑将其作为函数的参数传递,以便更灵活地指定拆分文件的大小。
缺少错误处理机制:代码没有处理文件读取和写入的潜在异常情况,如文件不存在、权限问题等。可以添加适当的异常处理代码,以增强代码的健壮性。
综上所述,以上是对代码存在的问题和改进空间的分析。根据实际需求和具体情况,你可以根据这些建议来优化和完善代码。
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 =
# 拆分每个文本文件
for file_path in file_list:
split_file(file_path, 100 * 1024 * 1024)# 拆分为每个文件大小不超过100MB
在这个改进后的代码中,我使用了shutil模块来创建目标文件夹,这样可以更方便地处理拆分文件的保存路径。另外,我使用了循环逐块读取文件的方式进行拆分,而不是一次性读取整个文件。这样可以避免大文件导致的内存问题。
我还根据拆分后的文件大小使用了一个循环索引index,这样可以在文件名中添加不同的索引,以避免命名冲突。
希望这个改进后的代码能够满足你的需求!如有需要,请随时提出进一步的问题。 有些同学可能没有安装环境,这个是EXE版+python源代码
链接:https://pan.baidu.com/s/1Wiql8fOlYb43AxoFALNEEw?pwd=0jyv
提取码:0jyv
我比较对你分割的文本感兴趣,什么文本能有100M darkreg 发表于 2023-5-16 15:02
有些同学可能没有安装环境,这个是EXE版+python源代码
链接:https://pan.baidu.com/s/1Wiql8fOlYb43AxoFA ...
谢谢打包好的成品 感谢分享打包EXE 很贴心 100M的文本,对我来说好恐怖。。。 感谢分享 软件好用,exe文件要是能方便更改分割大小和分割时进行确认就更人性化了,谢谢分享。 不懂,但一如既往支持