如何用python 对PDF进行拆分,批量修改文件名(根据excel表格)
文章目录可能需要的库:==========================在此文中 你可以得到的封装方法有:1.根据任意页数平均拆分一个PDF文件2.批量删除文件名中的任意字符3.将文件列表以阿拉伯数字重排序4.根据Excel两列数据批量修改文件名(oldname、newname)写在最后:上面的每一个方法都可以独立使用,按序使用则可以解决“拆分-对拆分后的文件重命名”可能需要的库:from Py
·
文章目录
可能需要的库:
from PyPDF2 import PdfFileReader, PdfFileWriter
import os
import pandas as pd
import shutil
import re
若没有自行 pip install
==========================
在此文中 你可以得到的封装方法有:
1.根据任意页数平均拆分一个PDF文件
pdf_input ='大文件路径'
path_output='输出拆分文件的路径'
num_file =要拆成几份pdf(数字)
num_page =每份pdf平均几页(数字)
def pdf_split_3(pdf_input, path_output, num_file, num_page):
fname = os.path.splitext(os.path.basename(pdf_input))[0] # 获取文件名,不含后缀名
for i in range(num_file): #num_file要拆分的文件数
with open(pdf_input, 'rb') as open_pdf: # rb二进制打开读取,wb二进制打开写入
pdf_reader = PdfFileReader(open_pdf)
pdf_writer = PdfFileWriter()
if (i+1)*num_page <= pdf_reader.numPages:
for page in range(i*num_page, (i+1)*num_page):
pdf_writer.addPage(pdf_reader.getPage(page))
# output_filename = path_output + r'\{}{}.pdf'.format(fname,i+1)
output_filename = path_output + r'\{}{}.pdf'.format(fname,i+1)
# output_filename = os.path.join(path_output, '{}_{}.pdf'.format(fname,i+1)) # 等价
else:
for page in range(i*num_page, pdf_reader.numPages):
pdf_writer.addPage(pdf_reader.getPage(page))
# output_filename = path_output + r'\{}_{}.pdf'.format(fname,i+1)
output_filename = path_output + r'.pdf'.format(fname,i+1)
# output_filename = os.path.join(path_output, '{}_{}.pdf'.format(fname,i+1)) # 等价
with open(output_filename, 'wb') as out:
pdf_writer.write(out)
print('拆分成功!!')
2.批量删除文件名中的任意字符
dirPath =需要批量修改的文件目录
pattern='需要删去的字符'(记得加引号)
def Delet_File_Name(dirPath,pattern):
"""
:param dirPath: 文件夹路径
:param pattern: 正则匹配模式
:return:
"""
# 对目录下的文件进行遍历
for file in os.listdir(dirPath):
# 判断是否是文件
if os.path.isfile(os.path.join(dirPath, file)) == True:
# 用正则匹配,去掉不需要的词
newName = re.sub(pattern, "", file)
# 设置新文件名
newFilename = file.replace(file, newName)
# 重命名
os.rename(os.path.join(dirPath, file), os.path.join(dirPath, newFilename))
print('文件名中的['+pattern+']已删除成功')
3.将文件列表以阿拉伯数字重排序
仅适用于文件名仅为阿拉伯数字的情况
做这一步的目的是,python获取的文件List默认以(1,10,11,12…,2,20)的顺序进行排序
此方法重新调整获取到的文件名顺序为(1,2…10,11,12)
若不进行此步重排序 第4步的改名会因乱序导致错误
PS:方法中的新文件名可以进行自由修改,这里默认《segment+新序号》
dirPath='文件目录'
# 重新调整文件名顺序为(1,2…10,11) 而不是Python默认的(1,10,11,12…,2,20)
def reorder_File_Name(dirPath):
fileList=os.listdir(dirPath)
#get_key是sotred函数用来比较的元素,该处用lambda表达式替代函数。
get_key = lambda i : int(i.split('.')[0])
new_sort = sorted(fileList, key=get_key)
#print(fileList, '\n', new_sort)
n = 0
for i in fileList:
# 设置旧文件名(就是路径+文件名)
oldname = dirPath + os.sep + new_sort[n] # os.sep添加系统分隔符
# 设置新文件名
newname = dirPath + os.sep + 'segment' + str(n + 1)+'.pdf'
os.rename(oldname, newname) # 用os模块中的rename方法对文件改名
# print(oldname, ' ======> ', newname)
n += 1
print("文件名重排序成功,目前均为 [segment+序号]")
4.根据Excel两列数据批量修改文件名(oldname、newname)
其中excel中的数据要这样:
excelname=存有新老文件名的excel路径
dirPath =老文件们所在的目录
def rename_according_to_xlsx(excelname, dirPath):
data = pd.read_excel(excelname, sheet_name='Sheet1') # 读取同一个表格中指定 Sheet1 中的数据,不指定时直接默认读取到这个Excel的第一个表单
# 遍历该文件夹所有的文件,并for循环
for name in os.listdir(dirPath):
# 文件名加上文件夹构成绝对路径
before_file = os.path.join(dirPath, name)
# 获取当前文件名所在行
index = data.loc[data['oldname'] == name]
# print("2=", index)
# 当前文件所对应的新名称
new_name = index['newname'].values
if len(new_name):
# index['code'].values 为当前文件名所对应的新名称
after_file = os.path.join(dirPath, new_name[0])
# 利用shutil.move将文件移动到原来位置(重命名的效果)
shutil.move(before_file, after_file)
else:
break
print("根据excel内容所有文件名称修改完成!!!")
写在最后:上面的每一个方法都可以独立使用,按序使用则可以解决“拆分-对拆分后的文件重命名”
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)