我正在做 PDF Flatting 但挑战是源 pdf 是存储“c:\root folder\folder1\subfolders1\subfolders”每个文件夹和子文件夹都有 PDF,在 pdf 扁平化完成后,文件保存在不同的位置,但结构仍然存在与 c:\folder1\subfolders1\subfolders 一样。 文件夹结构示例 enter image description here
我面临挑战,因为 PDF 名称是这样的 (06032021_toibhoc_mp_01_1_col_r1.pdf, 06032021_toibhoc_PP_01_1_col_r1.pdf, 06032021_toiind_mp_01_1_col_r1)
文件名的语法:- Date_Techcode_mp_pageno_edition_number_col_page_revisionnumber
我只需要关注日期和技术代码(即 06032021_toibhoc),因为这在每个文件中都是独一无二的。 情况1: 如果文件名以明天日期和今天日期开头,我想检查日期只处理它们。 案例2。 我想通过 JSON 文件检查技术代码。我有一个存储技术代码,我想对其进行增肥,因此如果 JSON 文件技术代码仅存在于该文件进程中,则程序应将文件名教学代码与 JSON 文件进行比较,否则它会复制到目的地而无需进程。
json 文件示例。 {"toiac_mp","toiac_pp","su_mp","rjk_mp","rjk_pp","bar_mp","cap_mp",”cap_pp”"}
案例 3:- 我的工作时间是下午 3 点到凌晨 2 点,因为我希望它在设定的工作时间后更改
我尝试使用以下代码处理文件夹和子文件夹中的每个文件。
import win32com.client, win32com.client.makepy, os, winerror
from win32com.client.dynamic import ERRORS_BAD_CONTEXT
import ghostscript,locale,time,datetime
import threading
def convert_to_1_3(dirpath,out_file,org_name):
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
try:
src = os.path.join(dirpath,org_name)
win32com.client.makepy.GenerateFromTypeLibSpec('Acrobat')
adobe = win32com.client.DispatchEx('AcroExch.App')
avDoc = win32com.client.DispatchEx('AcroExch.AVDoc')
if avDoc.Open(src," "):
pdDoc = avDoc.GetPDDoc()
jObject = pdDoc.GetJSObject()
jObject.SaveAs(out_file, "com.adobe.acrobat.ps")#com.Callas.preflight.pdfa
except Exception as e:
print(str(e))
finally:
avDoc.Close(True)
jsObject = None
pdDoc = None
avDoc = None
def ps2pdf(ps_input_path, pdf_output_path):
args1 = ["ps2pdf", # actual value doesn't matter
"-sBATCH",
"-sNOPAUSE",
"-sSAFER",
"-sDEVICE=pdfwrite",
"-dCompatibilityLevel=1.3",
"-sOutputFile=" + pdf_output_path,
ps_input_path]
encoding = locale.getpreferredencoding()
args1 = [a.encode(encoding) for a in args1]
ghostscript.Ghostscript(*args1)
ghostscript.cleanup()
def write_log(file):
start_time = time.time()
current_date_and_time = datetime.datetime.now().strftime("%d%m%Y-%H:%M:%S")
current_date_and_time_string = str(current_date_and_time)
with open(file,'a+') as out:
out.write(current_date_and_time_string+"\n--- %s seconds ---" % (str(time.time() - start_time))+'\n')
# print("--- %s seconds ---" % (time.time() - start_time))
def main(input_file,pdf_file):
try:
for dirpath, dirnames, filenames in os.walk(inputpath):
# structure = os.path.join(outputpath, dirpath[len(inputpath):])
structure = (outputpath+dirpath[len(inputpath):])
if not os.path.isdir(structure):
os.mkdir(structure)
for file in filenames:
if not file.endswith('qxd.pdf'):
# shutil.copy2(os.path.join(dirpath,file),os.path.join(structure,file))
PS_filename='ps'.join(str(file).split('pdf'))
PDF_filename='pdf'.join(str(file).split('ps'))
convert_to_1_3(dirpath,PS_filename,file)
ps2pdf(os.path.join(dirpath,PS_filename),os.path.join(structure,PDF_filename))
os.remove(os.path.join(dirpath,PS_filename))
except Exception as e:
print(str(e))
if __name__=="__main__":
log_file="\\PDF_1.3\log.txt"
inputpath = '/121rawfile'
outputpath = 'c:/'
# t1=threading.Thread(target=main(inputpath,outputpath),args=(10 ,0))
main(inputpath,outputpath)
write_log(log_file)
# t1.start()
答案 0 :(得分:1)
用于处理(06032021_toibhoc_mp_01_1_col_r1.pdf、06032021_toibhoc_PP_01_1_col_r1.pdf、06032021_toiind_mp_01_1_col_r1.pdf)
首先可以读取配置文件
foo.com/form?var1=value1&var2=value2&...
然后您可以使用 DateTime 获取日期和 fnmatch.fnmatch 来搜索文件。检查今天和明天的文件,您可以同时使用
def read_config():
with open('/path/filename.config', 'r') as lookupfile:#use your path name
for line in lookupfile:
tech= [word[1:-1] for word in line.split(",")]
return tech
如果我更正了你的完整代码,我们会喜欢这个:
tom_date=(datetime.today()+timedelta(days=1)).strftime("%d%m%Y")
today_date=(datetime.now()).strftime("%d%m%Y")
pattterns=(tom_date+'_'+techcode+'*',today_date+'_'+techcode+'*')
if [pat for pat in pattterns if fnmatch.fnmatch(file,pat)]:
#do waht you want