觉得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, math
errfile = 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")
# TODO
from docx import Document
# 打开文档,原文不要使用主题宋体或主题字体,否则无法修改字体样式
path = input("请输入文件路径(含文件拓展名,同路径可只写文件名):")
pathrip = path.strip('"')
doc = Document(pathrip)
# doc = Document('修改后的文档1.docx')
# 用于记录当前的编号
index = 1
# []自动填充1个号码,[2]则填充为[-]格式,表示2个号码,[,2]填充为[,-]格式
paras = doc.paragraphs
for nopara,para in enumerate(paras):
runs = para.runs
# new_text = ""
runlst = []
lftindexlst = []
rgtindexlst = []
for norun,run in enumerate(runs):
cur_text = run.text
runlst.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].text
txtlst.append(txt)
n = 0
for 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 += 1
for norun, run in enumerate(runs):
cur_text = run.text
if '[' 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 = True
index += new_num
elif cur_text == '[]':
run.text = cur_text.replace(']', f'{index}]')
run.font.name = 'Times New Roman'
run.font.superscript = True
# runs[norun+1].font.superscript = True
index += 1
doc.save('修改后的文档.docx')
# assert a != 0, "a不能为0"
# raise Exception("XX")
except Exception as ex:
# If an error occurred, print line number and error message
import traceback
import sys
tb = 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("回车键退出")