给知网没有书签的pdf文件添加书签(利用python解析txt文件内容并为pdf添加目录)

今天利用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[
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值