今天利用tampermonkey的知网下载助手脚本下载pdf格式论文时,发现论文缺少书签,而脚本可以下载一个txt格式的书签(目录),因此打算利用python将txt格式的目录添加到pdf中。
txt文件解析
txt 文件的读取
利用python读取txt文件时,使用的是python中的open方法,读取文件时最好加上文件的编码方式。不然有可能出现以下错误:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 14: illegal multibyte sequence
这是因为再windows系统中python读取文件时的默认编码方式不是utf-8导致的。
实现代码如下:
txtpath = "D:/目录.txt"
with open(txtpath,'r',encoding='utf-8') as f:
list_data = f.read()
print(type(list_data)) # 打印文件读取得到变量的类型,输出结果为“str”,即文本类型
print(list_data)
转义字符的原样打印
通过以上步骤已经可以读取到txt文件中的内容了,由于换行符、制表符在使用print输出时会可视化输出,而不是输出\t \n 这种转移字符,而在进行文本内容解析时需要对这些转义字符进行解析,所以现在需要将转义字符原样输出,其方法是将字符串放到数组中,然后打印数组。
实现代码如下:
str='致谢\t5\n摘要\t6\nABSTRACT\t8\n1 绪论\t16\n\t1.1 研究意义\t16\n\t'
print([str])
输出结果:
['致谢\t5\n摘要\t6\nABSTRACT\t8\n1 绪论\t16\n\t1.1 研究意义\t16\n\t']
txt文件按行读取
而通过分析txt中的文本可以发现,txt文件中的内容每行对应一条目录,因此可以采用按行读取的方式一行行的去对文本进行解析。
按行读取的代码如下:
with open(txtpath,'r',encoding='utf-8') as f:
for line in f:
print([line]) # 将行文本放在数组中打印是为了查看转移字符
pass
书签文本信息解析
观察每行文本信息可以发现,书签的格式大致为
\t书签文字\t页码\n
因此解析文本时,可以先找到倒数第一个\t制表符,从而确定页码,然后就可以将页码以外的文本全部放到书签文本中了,而书签是几级书签,可以通过每行文字前面\t制表符的个数确定。
参考代码:
for line in f:
line=line.replace('\n','') #去除\n
i0=line.rfind('\t') #在find前加r的效果是从后往前搜索
page_num=int(line[i0+1:])
line=line[