根据内容按行号分割文本文件(仅适用小文件)
背景书稿用MD编辑,原来每章是一个独立的文件,在最后通稿时,合并成了一个大文件。问题来了,3万多行的MD文件,大部分编辑器用起来都极端缓慢,没办法只能按文本文件进行编辑。通完稿后又需要按章分割文件。。。。原理首先将MD文档按行转换为列表,然后在每行内容中查找模式字符串,也就是查找分割文件的标识,根据记录下的模式字符串所在的行号分割文件。代码#!/usr/bin/env python#coding=
背景
书稿用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"# 第")
更多推荐
所有评论(0)