【问题标题】:Pypdf2 merger function and startswithPypdf2合并函数和startswith
【发布时间】:2021-03-17 23:19:11
【问题描述】:

第一次在这里编码。我正在尝试创建一个程序来帮助使用 python 自动化我在办公室的一些工作。

我要做的是将文件夹 1 中的 pdf 文件与文件夹 2 中的另一个同名 pdf 文件合并。我也想用 Tkinter gui

这就是我目前所得到的

from tkinter import *
from PyPDF2 import PdfFileMerger

root = Tk()

  
# Creating a Label Widget
MainLabel = Label(root, text="PDF Rawat Jalan")
# Shoving it onto the screen
MainLabel.pack()

#Prompt Kode
KodeLabel = Label(root, text="Masukan Kode")
KodeLabel.pack()

#Input Kode

kode = Entry(root, bg="gray",)
kode.pack()


#function of Merge Button
def mergerclick():
    kode1 = kode.get()
    pdflocation_1 = "C:\\Users\\User\\Desktop\\PDF\\Folder 1\\1_"+kode1+".pdf"
    pdflocation_2 = "C:\\Users\\User\\Desktop\\PDF\\Folder 2\\2_"+kode1+".pdf"
    Output = "C:\\Users\\User\\Desktop\\PDF\\output\\"+kode1+".pdf"
    merger = PdfFileMerger()

    merger.append(pdflocation_1)
    merger.append(pdflocation_2)

    merger.write(open(Output, 'wb'))
    confirmation = kode1 +" merged"
    testlabel = Label(root, text=confirmation)
    testlabel.pack()



#Merge Button
mergerButton = Button(root, text= "Merge", command=mergerclick)
mergerButton.pack()

root.mainloop()

现在我应该附加第三个文件,但我应该附加的第三个文件的文件名中有日期。例如:文件1(010.pdf);文件 2 (010.pdf);文件 3 (010_2020_10_05)。

每个文件夹大约有 9000 个文件 我该怎么做?

【问题讨论】:

  • 有点不清楚你在问什么。问题与文件数或文件名有关吗? tkinter 是您需要帮助的特定问题的一部分吗?
  • 非常抱歉,英语不是我的主要语言。 tkinter 与问题无关。这是关于文件名的。我应该合并文件夹 1-3 中的文件,文件夹 1&2 中的文件具有相同的名称,而在文件夹 3 中,它的文件名末尾有一个元数据。
  • 完全不用担心。语法完全没问题!我只是不确定你问的是哪一点。

标签: python pypdf2 startswith pdfmerger


【解决方案1】:

我认为您需要的是一种仅查找以特定字符串为前缀的文件的方法。根据日期后缀,我猜文件名可能不是唯一的,所以我写这个来查找所有匹配项。这样的事情会做到这一点:

import pathlib

def find_prefix_matches(prefix):
  dir_path = pathlib.Path(directory_name)
  return [str(f_name) for f_name in dir_path.iterdir() 
      if str(f_name).startswith(prefix)]

如果你只是学习写代码,这个例子比较简单。但是,如果您需要同时匹配 9,000 个文件,则效率不高。为了让它运行得更快,您需要加载文件列表一次,而不是每次请求。

import pathlib

def find_prefix_matches(prefix, file_list):
  return [f for f in file_list if f.startswith(prefix)]

file_list = [str(f_name) for f_name in dir_path.iterdir()]
for file_name_prefix in your_list_of_files_to_append:
  file_matches = find_prefix_matches(file_name_prefix, file_list)

【讨论】:

  • 在第二个代码中,我应该放 dir_path = pathlib.Path(directory_name) 还是不放?
  • 啊,是的,因为它被写成 dir_path 需要是一个 Path 对象
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 2010-10-24
  • 2014-07-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多