当前位置: 首页 > news >正文

科研论文word格式参考文献自动编码脚本

觉得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("回车键退出")

相关文章:

  • 力扣HOT100之链表:141. 环形链表
  • 数据结构4
  • 论文笔记:Instruction-Tuning Llama-3-8B Excels in City-Scale MobilityPrediction
  • vuex和pinia区别
  • 16 网络服务应用
  • 软考中级-软件设计师 2023年上半年上午题真题解析:通关秘籍+避坑指南
  • 在 Ubuntu 22.04 上安装 Docker Compose 的步骤
  • 帕累托分布的均值和方差
  • 【第一节】Python爬虫基础-HTTP基本原理
  • 基于 Hough 变换的直线检测
  • 高性能计算面经
  • Docker学习之容器虚拟化与虚拟机的区别(day11)
  • python笔记:unsloth (Basic)
  • Python项目-基于Flask的个人博客系统设计与实现(2)
  • 【系统移植】(一)概念流程
  • 零基础玩转深度神经网络大模型:从Hello World到AI炼金术(详解版)
  • 如何在中科方德llinux系统上离线安装salt-minion
  • AIP-210 Unicode
  • 【初阶数据结构】队列
  • 浅谈多个虚拟机(WSL和VMWare)的网络配置
  • 外综服务平台哪里做网站/企业seo关键词优化
  • 诸暨哪些公司可以制作网站/优化设计
  • 网站建设有什么用/网络广告策划案