论文批量操作总结


参考博文:
控制警告: 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("该路径下不存在所查找的目录!")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值