小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一周的工作1天干完/python+Delphi自動化記錄

 新用戶5228KeDY 2021-10-10

剛剛結(jié)束的一個事情,僅限于完成了任務(wù)。

一、任務(wù)描述

有一個超巨型的資料性的文件,是網(wǎng)頁上查詢之后的結(jié)果,有幾百頁、幾百筆資料,需要把里面的資料一條一條的列在一個單獨立的文件里面,并且,文件用“組序號-標(biāo)識-名稱.pdf”來命名。

組序號由另一份Excel文件給出,每組之中有標(biāo)識和名稱域與超巨pdf中的相應(yīng)域?qū)?yīng)。

難點:

1、不能手工操作。不易一一對應(yīng),且不產(chǎn)生馬虎和疏忽的錯誤。

2、沒有長期時間。大致實測,一筆資料從信息提取、標(biāo)識對應(yīng)、生成新文件、按規(guī)則命名大約3分鐘左右時間,1000筆資料大約50小時,每天8小時不動,大約6天,一周。一周下來,估計人也就廢了。我相信這事兒沒有兩周干不下來。

3、不易協(xié)同作業(yè)。Excel文件規(guī)格不盡相同,且超巨pdf不便擴(kuò)散,所以最好是一下子over。

二、任務(wù)分解

1、根據(jù)標(biāo)識號拆分超巨pdf。這一步可以在python里用PyPDF2包完成。

2、規(guī)范Excel格式和內(nèi)容。這一步在Excel里面用排序、函數(shù)和VBA足夠,之后導(dǎo)出為csv,便于最終Delphi處理它們。

3、根據(jù)標(biāo)識和名稱對應(yīng)并拼接資料,按標(biāo)識生成單個pdf文件。由于所有資料都沒有放置在數(shù)據(jù)庫里,因此統(tǒng)一按字段當(dāng)成格式文本來搜索是否有匹配。無匹配時,再巡回一次,避免標(biāo)識不在指定的位置上。

三、功能片斷

1、拆分超巨pdf。

部分代碼:

'''

分拆一個多頁大pdf文件為指定頁數(shù)的小pdf子文件

以下代碼在py3Anaconda 4.3.30、pypdf2-1.26.0

生成的子文件保存在本腳本文件所在的目錄下

'''

from PyPDF2 import PdfFileReader, PdfFileWriter

def pdf_splitter(path,start,end):

    pdf = PdfFileReader(path)

    pdf_writer =PdfFileWriter()

    output_filename ='page_{}.pdf'.format(end+300)

    for page inrange(start,end):      

       pdf_writer.addPage(pdf.getPage(page))

        print(page)

    withopen(output_filename,'wb') as out:

        pdf_writer.write(out)

       print('Created:{}'.format(output_filename))

path = 'F:/a/301368.pdf'

pageNum=68#文件的尾頁頁數(shù)

for i in range(pageNum):

    pdf_splitter(path,i,i+1)

2、pdf能否正常被搜索。若能,pyPDF2可通過PdfFileReader正常導(dǎo)出文本,否則可以OCR,或者pdf轉(zhuǎn)word,再從word轉(zhuǎn)到txt,進(jìn)入Delphi查詢。

from PyPDF2 import PdfFileReader

filename = 'F:/a/PT/page_2.pdf'

pdf = PdfFileReader(open(filename, "rb"))

pageNum=pdf.getNumPages()

text=''

for i in range(0, pageNum):

   text+=pdf.getPage(i).extractText()

print(text)

3、Excel重復(fù)行、重復(fù)列的判斷。排序,上或下錯開1行,或錯開1列,if。略。

4、Delphi拼接每筆資料,并生成pdf文件。

python生成pdf文件,留出來標(biāo)識,Delphi通過標(biāo)識,讀取csv,重命名文件。

uses FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);

var

  txtFile: TextFile;

  s: string;

begin

  AssignFile(txtFile, 'F:\a\XLS_idname.txt');

  Reset(txtFile);

  while not eof(txtFile) do

  begin

    readln(txtFile, s); //讀取一行保存到字符串s

    //if pos('標(biāo)識號',s)<>0then

    Memo1.Lines.Add(s); //Memo1中顯示

  end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

  FileListBox1.Directory :='F:\a\b';

end;

procedure TForm1.Button3Click(Sender: TObject);

var

  myf, Newf: string;

  i, j: integer;

begin

  //重命名開始

  for i := 0 toFileListBox1.Items.Count - 1 do

  begin

    myf :=FileListBox1.Items[i];

    //找組名和名稱

    for j := 0 tomemo1.Lines.Count - 1 do

    begin

      if pos(LeftStr(myf, 8),memo1.Lines[j]) <> 0 then

        break;

    end;

    Newf :=StringReplace(memo1.Lines[j], ',', '-', [rfReplaceAll]);

    ReNameFile('F:\a\b\' +myf, 'F:\a\c\' + Newf + '.pdf');

    sleep(50);//給點兒寫磁盤時間

  end;

  showmessage('OK!');

end;

四、幾點討論

1、非圖片版的pdf就一定能提取其中的文本嗎?感覺是不一定!盡管中英文各種網(wǎng)絡(luò)中介紹各種方法處理pdf的文字提取問題,但是,確實是碰到了提取不了的情況。提取出來的文字,不是特殊編碼,也并非全是亂碼,查詢N久,沒解決,挺困惑。

2、不是一定圖片版的pdf才需要OCR,這個不用解釋了。

3、為什么不用python一擼到底?在python語言大行其道的今天,python幾乎無所不能了,但還存在一個熟悉程度的問題。Delphi太熟悉了,同等工作量,當(dāng)然熟悉的工具最快了。而且,pythonGUI在一個老Delphier面前,弱爆了。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多