基于滑动窗口把json文件的长文本,拆分成满足长度的多个子json文件

291 篇文章 2 订阅
# -*- coding: utf-8 -*-

import os
import json
import re


dir_source_name = 'FullText2'
dir_source_name_new = dir_source_name + '_new'
root_path = os.path.abspath(os.path.dirname(__file__))
json_path = os.path.join(root_path, dir_source_name)
json_path_new = os.path.join(root_path, dir_source_name_new)
max_len = 510
window_size = 64


def write_file_new(content, path):
    with open(path, 'w', encoding='utf-8') as fp:
        json.dump(content, fp, ensure_ascii=False)


def read_files(path, path_new):
    """
    pass
    """
    if not os.path.isdir(dir_source_name_new):
        os.makedirs(dir_source_name_new)
    files = os.listdir(path)  # 得到文件夹下所有文件的名称
    for file in files:
        filepath = path + '/' + file
        filepath_new = path_new + '/' + file.split('.')[0]
        if os.path.isfile(filepath):  # 如果是文件就打开,需要注意os.path.isfile需要传入绝对地址
            with open(filepath, 'r', encoding='UTF-8') as js_file:
                js = json.load(js_file)
                text = js['text'].replace('\n', '。')
                text = re.sub(r'\s', '', text)
                text_len = len(text)
                num = text_len // max_len
                if num == 0:
                    js['text'] = text
                    write_file_new(js, filepath_new)
                else:
                    for i in range(0, 2 * num):
                        if (i + 1) * max_len - i * window_size > text_len:
                            js['text'] = text[(i * max_len - i * window_size): text_len]
                            write_file_new(js, filepath_new + '_' + str(i) + '.json')
                            break
                        else:
                            js['text'] = text[(i * max_len - i * window_size): (i + 1) * max_len - i * window_size]
                            write_file_new(js, filepath_new + '_' + str(i) + '.json')


read_files(json_path, json_path_new)
# os.mkdir()创建路径中的最后一级目录,而如果之前的目录不存在并且也需要创建的话,就会报错。
# os.makedirs()创建多层目录,如果中间目录都不存在的话,会自动创建。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值