6
8月
2025
包装操作与文件一起使用 - 重命名和组合PDF
18:24

包装操作与文件一起使用 - 重命名和组合PDF

6 8月 2025 18:24

我决定在Python分享两个程序。 首先是根据创建日期将文件重命名为序列号。 第二个是PDF文件的关联,按其数字进行。

工作中的任务是扫描用户管理的最后一张,其中指示了序列号。 有6个文件。

一组文档在文件夹中手动显示,数字01、02、03等。
一张纸是一个PDF文件。 然后其中一些合并了两张纸。

文件夹01包含6个文件
+随机名称。 PDF
+随机名称。 PDF
+随机名称。 PDF
+随机名称。 PDF
+随机名称。 PDF
+随机名称。 PDF

任务:进入文件夹01设置
01_Res1.pdf
01_Res2.pdf
01_Res3.pdf
01_RES4.PDF

将任务分为两个子任务:

  • _ fands and命名文件在create_in的日期in the freation_in的名称 +序列号的名称:01-1.pdf,01-2.pdf,01-3.pdf,01-4.4.pdf,01-5.pdf,01-5.pdf和01-6.pdf。
  • 根据算法: 3和4的文件文件,一个pdf,5和6文件到另一个pdf文件。

第一个脚本 rename_files.py 对于不仅可以重命名的PDF格式的文件,而且对任何一个都很有用。
第二个脚本 combine_files.py 实现了在每个目录中组合PDF文件的逻辑。


用于启动程序的输入参数 - ma的parent文件夹 ma(其中包含嵌套文件夹01、02、03等)。

启动示例:

python rename_files.py /home/user/parent_folder
python combine_files.py /home/user/parent_folder

parent_folder содержит папки 01, 02, 03 и т.д. с файлами PDF.

发射rename_files.py谨慎,_不在工作目录_上,因为将所有文件重命名为无需请求的包装模式。

文件的内容rename_files.py:

# This script takes path to directory with set of subdirectories, numbered 01, 02, 03, ... etc.

and renames PDF files in subdirectories after the name of subdirectory and integer number in order of creation of the file.

example: before script run subdirectory 01 consists of files : random912371.pdf, random167722.pdf, random561724.pdf

and after the script run, in subdirectory 01 files renamed to: 01-1.pdf,

01-2.pdf, 01-3.pdf

import os
from pathlib import Path
import sys
import pathlib

def list_dirs(folder_path):
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isdir(file_path):
dir_path = file_path
print(f"Processing directory '{dir_path}'")
rename_files_with_creation_date(dir_path)
print("Done!")

def rename_files_with_creation_date(folder_path):

tpl = "{0}-{num:02d}"

tpl = "{0}-{num}"
cnt = 1
folder_name = folder_path.split("/")[-1]
parent_folder_name = os.path.split(folder_path)[-1]
os.chdir(folder_path)
files = filter(os.path.isfile, os.listdir(folder_path))  # get files only
files = [os.path.join(folder_path, f)
         for f in files]  # add path folder_path to each file f
files.sort(key=lambda x: os.path.getmtime(x))  # sort by creation time

for filename in files:
    # print(f"{cnt}. Renaming '{filename}'...")
    if os.path.isfile(filename):
        ext = pathlib.Path(filename).suffix
        new_name = tpl.format(folder_name, num=cnt) + ext
        filename_new = os.path.join(folder_path, new_name)
        if (filename != filename_new):
            print(f"Ranaming '{filename}' to '{filename_new}'")
            if not os.path.isfile(filename_new):
                os.rename(filename, filename_new)
                # print("OK")
            else:
                print(f"File '{filename_new}' exists, skipping.")
        cnt = cnt + 1

if name == "main":
if len(sys.argv) == 2:
folder_path = sys.argv[1]
else:
folder_path = input("Enter the folder path: ")
list_dirs(folder_path)

除了协会外,bombine_files.py文件还实现了从肖像到专辑(90度)的页面。可以通过编辑脚本的初始文本来删除此转换。

# This script combines files

import os
import sys
import pathlib
import logging
import threading
import time
from pathlib import Path
from subprocess import PIPE, run

def list_dirs(folder_path):
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isdir(file_path):
dir_path = file_path
print(f"Processing directory '{dir_path}'")
combine_files(dir_path)
print("Done!")

def combine_files(folder_path):
folder_name = folder_path.split("/")[-1]
parent_folder_name = os.path.split(folder_path)[-1]
os.chdir(folder_path)
files = filter(os.path.isfile, os.listdir(folder_path))
files = sorted(files)

cnt = 1
for filename in files:
    full_name = os.path.join(folder_path, filename)
    if (filename == parent_folder_name + "-1.pdf"):
        suffix = "_res1.pdf"
        new_name = folder_name + suffix
        cmdstr = "qpdf " + full_name + " " + new_name + " --rotate=+90"
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-2.pdf"):
        suffix = "_res2.pdf"
        new_name = folder_name + suffix
        new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf " + full_name + " " + new_name + " --rotate=+90"
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-3.pdf"):
        suffix = "_res3.pdf"
        new_name = folder_name + suffix
        full_new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf --empty --pages " + full_name + " " + \
            full_name.replace("3.pdf", "4.pdf") + " -- --rotate=+90 " + full_new_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-4.pdf"):
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-5.pdf"):
        suffix = "_res4.pdf"
        new_name = folder_name + suffix
        full_new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf --empty --pages " + full_name + " " + \
            full_name.replace("5.pdf", "6.pdf") + " -- --rotate=+90 " + full_new_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-6.pdf"):
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))

if name == "main":
if len(sys.argv) == 2:
folder_path = sys.argv[1]
else:
folder_path = input("Enter the folder path: ")
list_dirs(folder_path)


带有2个程序的档案:
rename_files_by_created_date_and_combine.zip

我从这里得到了重命名文件的想法:GitHub - 按创建日期重命名文件,但那里的文件名是日_月_年_时_分_秒的形式,而我有 FOLDER_NAME-sequence_number。



相关出版物