背景
书稿用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"# 第")

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐