根据内容按行号分割文本文件(仅适用小文件)

背景

书稿用MD编辑,原来每章是一个独立的文件,在最后通稿时,合并成了一个大文件。问题来了,3万多行的MD文件,大部分编辑器用起来都极端缓慢,没办法只能按文本文件进行编辑。通完稿后又需要按章分割文件。。。。

原理

首先将MD文档按行转换为列表,然后在每行内容中查找模式字符串,也就是查找分割文件的标识,根据记录下的模式字符串所在的行号分割文件。

代码

#!/usr/bin/env python
#coding=utf-8
'''按文件内容分割文件,主要用于分割MD文档'''

import datetime
import sys
import os

#set sysencoding
reload(sys)
sys.setdefaultencoding('utf-8')

#建立新文件夹
def mkdirs(path): 
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")

    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)

    # 判断结果
    if not isExists:
        # 创建目录操作函数
        os.makedirs(path)
        # 如果不存在则创建目录
        #print path + u' make new dir'
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        #print path + u' dir exists'
        return False

#按行读取文本文件内容,转换为列表,每行内容为一个元素    
def ReadTxtFile(filename): 
    txt=open(filename).readlines()
    stringlist=[]
    for line in txt:
        stringlist.append(line.strip('\n'))
        txtstring=stringlist[:]
    return txtstring

#持久化本地文件
def SaveAsLocalFile(fname,filecontent,write_type='w',target_type='',id_dir=''):
    #文件夹、文件名配置
    new_path = os.path.join(os.getcwd(),target_type,id_dir)# 获取新文件夹路径
    #fname='%s.txt'%('aaaaaaa')# 获取新文件名 
    filename=os.path.join(new_path,fname)#连接路径和文件名
    #文件夹、文件操作
    mkdirs(new_path)#检测路径是否存在,不存在建立
    with open(filename, mode=write_type) as f:
        f.write(filecontent) 

def split_files_by_content(file_name, mode_string):
    '''根据内容分割文件,file_name为待分割的文件名称,mode_string为分割文件的模式'''
    split_signs = []

    txt = ReadTxtFile(file_name)

    for index, line in enumerate(txt):
        if mode_string in line:
            split_signs.append(index)

    for i in range(0, len(split_signs)):
        if i == len(split_signs) - 1 :
            out_put = txt[split_signs[i]:]
        else:
            out_put = txt[split_signs[i]:split_signs[i+1]]
        #SaveAsLocalFile(str(i+1).zfill(2)+'.md', '\n'.join(out_put),target_type="a")
        print str(i+1).zfill(2)+'.md'

if __name__ == '__main__':
    split_files_by_content(u"最终定稿20180207.md", u"# 第")

猜你喜欢

转载自blog.csdn.net/mighty13/article/details/79295472