论文批量操作总结

本文介绍了一种使用Python批量处理PDF文件的方法,包括批量重命名、查重和按论文标题重命名。通过PyPDF2和pdfminer等库,实现了PDF文件的高效管理和文件名标准化。


参考博文:
控制警告: python模块学习之warnings
python – 如何使用warnings.filterwarnings来抑制第三方警告
python进阶八_警告和异常
python读取pdf文本:
python读取pdf中的文本

Python 深入浅出 - PyPDF2 处理 PDF 文件

批量重命名
  • 将一个文件夹下的所有pdf文件重名为另一个文件夹下的pdf文件(从0开始编号)
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from shutil import copy2

src_dir = 'papers_oriDir'  # 源文件目录地址
des_dir = 'papers_oldDir'  # 新文件目录地址
num = 0

if not os.path.exists(des_dir):  # 如果没有目标文件夹,新建一个目标文件夹进行存储
    os.makedirs(des_dir)

if os.path.exists(src_dir):
    dirs = os.listdir(src_dir)  # 获取源文件的目录地址
    for dirc in dirs:  # 对于目录下的每一个文件
        #获取pdf对象
        old_file = os.path.join(src_dir, dirc)
        new_file = os.path.join(des_dir, str(num)+'.pdf')
        try:
        	os.rename(old_file, new_file)//重命名函数
         except Exception as e:
                print(e)
                print("重命名失败")
        num = num+1
        print("num : %s" % num, old_file)
else:
    print("该路径下不存在所查找的目录!")
  • 注意rename将一个相当于将一个文件移动到另一个目录下,即剪贴,但是需要保证文件不被占用,否则剪贴失败。
批量查重文件
  • 文件可能下载重复,这里是根据下载的文件名来删除重复的副本。
from io import StringIO
from io import open
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from shutil import copy2
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
import warnings

'''
    pdf论文去重操作,根据原始文件名的前几个字符
'''

#将所有的警告均转换为错误
#warnings.simplefilter("error", category = Warning,lineno = 0,append = True)

src_dir = 'papers_midDir'  # 源文件目录地址
des_dir = 'papers_midDir2'  # 新文件目录地址
mid_dir = 'papers_midDir2'
illegal_str = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']#非法字符
List_paper = []#存储论文标志,用于查重

if not os.path.exists(des_dir):  # 如果没有目标文件夹,新建一个目标文件夹进行存储
    os.makedirs(des_dir)

#根据文件名前几个字符查重
def unique(name, num):
    if name in List_paper:
        print("num : %s" % num, "重复文件")
    else:
        List_paper.append(name)
        print("num : %s" % num, dirc)
        copy2(os.path.join(src_dir, dirc), os.path.join(des_dir, dirc))

if os.path.exists(src_dir):
    dirs = os.listdir(src_dir)  # 获取源文件的目录地址
    lens = len(dirs)
    st = 0
    num = st

    for i in range(st, lens):  # 对于目录下的每一个文件
        dirc = dirs[i]
        name = dirc[0:3]
        unique(name, num)
        num = num+1
else:
    print("该路径下不存在所查找的目录!")
论文批量重命名(按论文标题)
  • 根据论文标题重命令文件名(存储到另一个目录下),同时筛选出报错,报警告和标题为空的存储为其他文件,等待手动操作。
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from shutil import copy2
import warnings

'''
    为pdf文档重命名为其论文名称存入des_dir目录下
    同时将报错的,报警告的,已经文件名处理为空或空格的文件存入mid_dir目录下,留给以后代码或手动处理
'''

#将所有的警告均转换为错误
warnings.simplefilter("error", category = Warning,lineno = 0,append = True)

src_dir = 'papers_oldDir'  # 源文件目录地址
des_dir = 'papers_newDir3'  # 新文件目录地址
mid_dir = 'papers_midDir'
illegal_str = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']#非法字符

if not os.path.exists(des_dir):  # 如果没有目标文件夹,新建一个目标文件夹进行存储
    os.makedirs(des_dir)

if os.path.exists(src_dir):
    dirs = os.listdir(src_dir)  # 获取源文件的目录地址
    lens = len(dirs)
    st = 0
    num = st
    for i in range(st, lens):  # 对于目录下的每一个文件
        dirc = dirs[i]
        #print(dirc)
        #os.rename(old_file, str(num))
        #读取对象的信息
        try:
            # 获取pdf对象
            old_file = os.path.join(src_dir, dirc)
            pdf_reader = PdfFileReader(open(old_file, 'rb'), strict=True)  # 打开并建立一个PDF文件对象
            paper_mes = pdf_reader.getDocumentInfo()#会出错
            paper_title = paper_mes.title  # 获取PDF标题
            if paper_title==None or paper_title=='' or paper_title=='':
                print("num : %s" % num, "没有解析出标题")
                copy2(os.path.join(src_dir, dirc), os.path.join(mid_dir, dirc) + '.pdf')
                num += 1
                continue
            print("num : %s" % num, paper_title)  # 终端显示处理到第几个文件
            num += 1
            paper_title = str(paper_title)  # 标题字符化

            #将标题中非法字符用'_'替换
            for each in illegal_str:
                if paper_title.find(each)!=-1:
                    paper_title = paper_title.replace(each, '_')
            #将论文重新存储到目标目录下,并重命名为论文标题
            copy2(os.path.join(src_dir, dirc), os.path.join(des_dir, paper_title) + '.pdf')

        except Exception as e:#异常的需要手动处理
            print("num : %s" % num, "文件处理异常")
            copy2(os.path.join(src_dir, dirc), os.path.join(mid_dir, dirc) + '.pdf')
            num = num+1
else:
    print("该路径下不存在所查找的目录!")
按条件剪切论文
  • 对于上面处理的报警告文件,有一部分可以代码处理。将可以处理的剪贴重名为论文标题即可。
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from shutil import copy2
import shutil
import warnings

'''
    为pdf文档重命名为其论文名称存入des_dir目录下
    同时将报错的,报警告的,已经文件名处理为空或空格的文件存入mid_dir目录下,留给以后代码或手动处理
'''

#将所有的警告均转换为错误
#warnings.simplefilter("error", category = Warning,lineno = 0,append = True)

src_dir = 'papers_midDir2'  # 源文件目录地址
des_dir = 'papers_newDir2'  # 新文件目录地址
mid_dir = 'papers_midDir2'
illegal_str = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']#非法字符


if not os.path.exists(des_dir):  # 如果没有目标文件夹,新建一个目标文件夹进行存储
    os.makedirs(des_dir)

if os.path.exists(src_dir):
    dirs = os.listdir(src_dir)  # 获取源文件的目录地址
    lens = len(dirs)
    st = 0
    num = st
    for i in range(st, lens):  # 对于目录下的每一个文件
        dirc = dirs[i]
        print(os.getcwd())
        #读取对象的信息
        try:
            # 获取pdf对象
            old_file = os.path.join(src_dir, dirc)
            f = open(old_file, 'rb')
            pdf_reader = PdfFileReader(f, strict=False)  # 打开并建立一个PDF文件对象
            paper_mes = pdf_reader.getDocumentInfo()#会出错
            paper_title = paper_mes.title  # 获取PDF标题
            if paper_title==None or paper_title=='' or paper_title=='':
                print("num : %s" % num, "没有解析出标题")
                #copy2(os.path.join(src_dir, dirc), os.path.join(mid_dir, dirc))
                num += 1
                continue
            print("num : %s" % num, paper_title)  # 终端显示处理到第几个文件
            num += 1
            paper_title = str(paper_title)  # 标题字符化

            #将标题中非法字符用'_'替换
            for each in illegal_str:
                if paper_title.find(each)!=-1:
                    paper_title = paper_title.replace(each, '_')
            #将论文重新存储到目标目录下,并重命名为论文标题
            new_file = os.path.join(des_dir, paper_title + '.pdf')
            #os.getcwd()获取当前代码的工作路径
            new_file_path = os.path.join(os.getcwd(), new_file)
            old_file_path = os.path.join(os.getcwd(), old_file)
            f.close()
            #注意在rename之前一定要关闭文件,否则无法重命名,剪切
            try:
                os.rename(old_file_path, new_file_path)
            except Exception as e:
                print(e)
                print("重命名失败")

        except Exception as e:#异常的需要手动处理
            print("num : %s" % num, "文件处理异常")
            num = num+1
else:
    print("该路径下不存在所查找的目录!")
内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值