觉得word格式论文的文献要手动编码是枯燥的工作,也用过知网研学的插件,但可能电脑问题不太好用,现在分享一个自制python脚本自动进行编码,整个流程如下:
1.首先确定好需要引文的顺序,本人一般在txt里编排,txt里的文献顺序可以使用以前分享的插件进行自动编排:
分享论文编排参考文献序号小脚本_参考文献超脚本数字-CSDN博客
譬如:
2.确定好顺序后在word中对应位置插入中括号,建议使用模板里的格式,其中[]自动填充1个号码,[2]或[3以上]则填充为[-]格式,表示多个号码,[,2]填充为[,-]格式,[.]不进行操作
脚本.py及示例word文件下载:【免费】论文word参考文献自动编码脚本及示例文件资源-CSDN文库
使用python3运行脚本(arcgis用户可以使用pro的python3),运行填上文件名
结果:
完整代码:
# -*- coding:utf-8 -*-
# ---------------------------------------------------------------------------
# Author: LGZ
# Created on:
# Reference:
# coding:cp936 or coding:utf-8
# ---------------------------------------------------------------------------import logging, os, pprint,re
import pandas as pd
import numpy as np# import arcpy
# arcpy.env.overwriteOutput = True
# import itertools, random, matherrfile = r"ex.txt"
loggingfile = r"lg.txt"# logging.disable(logging.CRITICAL) #禁用CRITICAL级别以下的日志记录
# 按此格式显示DEBUG级别以上的日志记录
# logging.basicConfig(filename=loggingfile, level=logging.DEBUG, format="%(asctime)s-%(levelname)s-%(message)s")
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s-%(levelname)s-%(message)s")# pprint.pformat函数只能输入一个参数,logprint(*shape)中*shape为元组,将元组放进pprint.pformat
def logprint(*shape):return logging.debug(pprint.pformat(shape))# file =
# if os.path.isfile(file): # 判断文件是否已存在,已存在则删除
# os.unlink(file)
# if os.path.dirname(file) == "" : # 判断是否没有完整路径
# file = os.getcwd()+"//"+file # 如没有则连接工作目录制造完整路径
# file_list=os.listdir(file) # 根据需要的文件类型获取目录下文件名列表
# file_list=[i for i in file_list if i.endswith("xlsx") and \
# not i.startswith("~$")]# save_fold =
# os.makedirs(save_fold, exist_ok=True) # 根据文件夹是否已存在制造文件夹if __name__ == '__main__':"""脚本单独使用时运行以下内容""""""----------------------------------------------""""""---------------------PARA---------------------"""try:logprint("start of program")# TODOfrom docx import Document# 打开文档,原文不要使用主题宋体或主题字体,否则无法修改字体样式path = input("请输入文件路径(含文件拓展名,同路径可只写文件名):")pathrip = path.strip('"')doc = Document(pathrip)# doc = Document('修改后的文档1.docx')# 用于记录当前的编号index = 1# []自动填充1个号码,[2]则填充为[-]格式,表示2个号码,[,2]填充为[,-]格式paras = doc.paragraphsfor nopara,para in enumerate(paras):runs = para.runs# new_text = ""runlst = []lftindexlst = []rgtindexlst = []for norun,run in enumerate(runs):cur_text = run.textrunlst.append(cur_text)if '[' in cur_text:lftindexlst.append(norun)if ']' in cur_text:rgtindexlst.append(norun)txtlst =[]for lftindex,rgtindex in zip(lftindexlst,rgtindexlst): # (5, 6) (91, 94)txtlst2 = []for i in range(rgtindex-lftindex):txtlst2.append(runs[lftindex+i].text)txt = ''.join(txtlst2)+runs[rgtindex].texttxtlst.append(txt)n = 0for lftindex,rgtindex in zip(lftindexlst,rgtindexlst): # (5, 6) (91, 94)for i in range(rgtindex-lftindex):runs[lftindex + i].text = ''runs[rgtindex].text = txtlst[n]n += 1for norun, run in enumerate(runs):cur_text = run.textif '[' in cur_text:re_num = re.findall(r'\d+', cur_text)if re_num :new_num = int(re_num[0])if new_num ==1:run.text = re.sub(r'\d+', f'{index}',cur_text)else:run.text = re.sub(r'\d+', f'{index}-{index+new_num-1}', cur_text)run.font.name = 'Times New Roman'run.font.superscript = Trueindex += new_numelif cur_text == '[]':run.text = cur_text.replace(']', f'{index}]')run.font.name = 'Times New Roman'run.font.superscript = True# runs[norun+1].font.superscript = Trueindex += 1doc.save('修改后的文档.docx')# assert a != 0, "a不能为0"# raise Exception("XX")except Exception as ex:# If an error occurred, print line number and error messageimport tracebackimport systb = sys.exc_info()[2]print(u"捕获到的异常信息是:{}".format(ex)) # 或者使用print("捕获到的异常信息是:",ex.args[0]或者str(ex)或者直接ex);3.9版本ex.message已不可用)print(u"捕获到的异常代码行号是:Line {0}".format(tb.tb_lineno))print(traceback.format_exc()) # 显示完整错误路径with open(errfile, "a") as err:err.write(traceback.format_exc())print(u"将traceback信息写入文件成功")# except arcpy.ExecuteError:# print(arcpy.GetMessages())# 无错误运行else后代码else:logprint("program success")# arcpy.AddMessage("program success")# 有没有错误均运行finally后代码finally:input("回车键退出")