zl程序教程

您现在的位置是:首页 >  后端

当前栏目

按照文件名最后数字进行排序

排序 进行 数字 最后 文件名 按照
2023-09-11 14:15:30 时间

简 介: 修改了ppt2csdn中存在的文件名称排序错误。通过提取文件名称最后面的数字字符串来作为文件排序的关键字,可以消除PPT文件在转存成JPEG文件时对应的数码编码方式。

关键词 PPTJPEGPython排序

文件排序
目 录
Contents
PPT,PDF转存JPEG
PDF,PPT转存
数字格式不同
带来的问题
修改排序程序
修改后的代码
修改后输出结果
总 结

 

§01 件排序


一、PPT,PDF转存JPEG

  通常情况下,需要将PDF,PPT文件形成图片导入CSDN作为文档存储。

1、PDF,PPT转存数字格式不同

  但是PDF,PPT在转存成JPEG文件的时候,文件名称命名不统一。对于PDF文件,它的文件后缀数字是等长的数字,比如对100页之内的文件, 最后的数字则是以“_0x”为标注。

▲ 图1.1.1 PDF文件存储为JPEG时文件名称

▲ 图1.1.1 PDF文件存储为JPEG时文件名称

  而PPT文件在转存成JPEG文件的时候,它的文件后缀中的数字是不定长的,而是从1 开始自然增长。

▲ 图1.1.2 PPT文件转存成JPEG文件后缀数字编码方式

▲ 图1.1.2 PPT文件转存成JPEG文件后缀数字编码方式

2、带来的问题

  在使用ppt2csdn将目录中的文件发送到CSDN的Markdown编辑器的时候,排序对于PDF文件是正确的。但是对于PPT的数字编码方式出现问题。

(1)排序Python代码

def picdir2csdn(dirstr, width, sideflag):
    ispicfile = lambda s : 1 if s.split('.')[-1].upper() == 'JPG' or \
                              s.split('.')[-1].upper() == 'BMP' or \
                              s.split('.')[-1].upper() == 'PNG' else 0

    pptimages = [s for s in os.listdir(dirstr) if ispicfile(s) == 1]
    s = sorted(pptimages, reverse=False)

    printf('Total Page Number : %d'%len(s))

    for f in s:
        fname = os.path.join(dirstr, f)
        printf(fname)
#        pasteimg2csdn(fname, width, sideflag)
#        time.sleep(.5)

(2)输出结果

  下面是排序输出结果,可以看到如果按照这个顺序,将JPEG导入CSDN的Markdown编辑器,会出现顺序错位。

Total Page Number : 35
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片1.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片10.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片11.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片12.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片13.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片14.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片15.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片16.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片17.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片18.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片19.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片2.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片20.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片21.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片22.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片23.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片24.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片25.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片26.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片27.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片28.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片29.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片3.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片30.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片31.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片32.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片33.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片34.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片35.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片4.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片5.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片6.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片7.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片8.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片9.JPG

二、修改排序程序

  下面需要对于ppt2csdn中的文件排序进行修改。

1、修改后的代码

  在对文件名进行排序前,先提取文件名中最后的数字字符串。然后在根据该字符串的大小进行文件名称的排序。

#------------------------------------------------------------
def filename2num(fs):
    for i in range(len(fs)):
        if not fs[-(i+1):].isdigit():
            return int(fs[-i:])

    return int(fs)

#------------------------------------------------------------
def picdir2csdn(dirstr, width, sideflag):
    ispicfile = lambda s : 1 if s.split('.')[-1].upper() == 'JPG' or \
                              s.split('.')[-1].upper() == 'BMP' or \
                              s.split('.')[-1].upper() == 'PNG' else 0

    pptimages = [s for s in os.listdir(dirstr) if ispicfile(s) == 1]
#    s = sorted(pptimages, reverse=False)

    pagenum = [filename2num(ss.split('.')[0]) for ss in pptimages]
    pagesort = sorted(zip(pptimages, pagenum), reverse=False, key=lambda x:x[1])

    s = [p[0] for p in pagesort]

    printf('Total Page Number : %d'%len(s))

    for f in s:
        fname = os.path.join(dirstr, f)
        printf(fname)
        pasteimg2csdn(fname, width, sideflag)
        time.sleep(.5)

2、修改后输出结果

  下面是修改后文件打印排序。

Total Page Number : 35
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片1.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片2.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片3.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片4.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片5.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片6.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片7.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片8.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片9.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片10.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片11.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片12.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片13.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片14.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片15.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片16.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片17.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片18.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片19.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片20.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片21.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片22.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片23.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片24.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片25.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片26.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片27.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片28.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片29.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片30.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片31.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片32.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片33.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片34.JPG
D:\Temp\JPEG\人工智能助力全国大学智能车竞赛\幻灯片35.JPG

 

  结 ※


  改了ppt2csdn中存在的文件名称排序错误。通过提取文件名称最后面的数字字符串来作为文件排序的关键字,可以消除PPT文件在转存成JPEG文件时对应的数码编码方式。


● 相关图表链接:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PPT2CSDN.PY                     -- by Dr. ZhuoQing 2021-01-04
#
# Usage: ppt2csdn w# s# #2
#        w800  : Set the width =800
#        s0,s1 : No side, has side
#        #2    : filename01
#
# Note: Copy the PPT file or related image directory into clipboard,
#       then use ppt2csdn to paste all the image into csdn.
#
# Install: pip install python-pptx-interface
#
#============================================================

from head import *
from PIL import Image, ImageDraw
from io import BytesIO
import win32clipboard
from pptx_tools import utils

#------------------------------------------------------------
num0len = 1                         # For file tail number 01 length

#------------------------------------------------------------
def extractfile(fname, imagedir=r'd:\temp\pptpng'):

    if os.path.isdir(imagedir):
        for f in os.listdir(imagedir):
            os.remove(os.path.join(imagedir, f))


    pptfile = fname
    png_folder = imagedir
    utils.save_pptx_as_png(png_folder, pptfile, overwrite_folder=True)

#------------------------------------------------------------
csdn_window = '写文章-CSDN博客'


#------------------------------------------------------------
def send_to_clipboard(clip_type, data):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(clip_type, data)
    win32clipboard.CloseClipboard()


#------------------------------------------------------------
def pasteimg2csdn(fname, width=800, sideflag=1):
    image = Image.open(fname)


    if sideflag > 0:
        draw = ImageDraw.Draw(image)
        draw.rectangle((0, 0, image.size[0]-1, image.size[1]-1), width=sideflag, outline='#c0c0c0')


    output = BytesIO()
    image.convert('RGB').save(output, 'BMP')
    data = output.getvalue()[14:]
    output.close()
    send_to_clipboard(win32clipboard.CF_DIB, data)

    #--------------------------------------------------------
    printf("\a")

    tspsendwindowkey(csdn_window, 'v', control=1,noreturn=1)
    time.sleep(2)

    #--------------------------------------------------------

    for i in range(20):
        time.sleep(1)
        readdata = tspread()

        if readdata[2] == 1: break
        if readdata[7] != 0: break
        if readdata[8] != 0: exit()
        if readdata[9] != 0: exit()

        tspsendwindowkey(csdn_window, 'c', control=1,noreturn=1)
        if clipboard.paste().find('在这里插入图片描述') >= 0:
            tspbeep(1500, 200)
            tspsendwindowkey(csdn_window, 'ac', control=1,noreturn=1)
            time.sleep(.5)
            break

        printf('\a')


    pastestr = clipboard.paste().split('![在这里插入图片描述](')

    if len(pastestr) < 2:
        printf("Can not find the ![Insert picture] discriptor !\a")
        exit()

    time.sleep(.25)
    #--------------------------------------------------------
    tspsendwindowkey(csdn_window, 'z', control=1,noreturn=1)
    pastestr = pastestr[1].split(')')[0].split('?')[0]


    widthstr = '=%dx'%width

    if width < 10: widthstr = ''

    pic_pos_str = 'pic_center'
    insertstring = ''
    morestring = ''

    insertstring = '![%s](%s#%s %s)\r\n'%(insertstring, pastestr, pic_pos_str, widthstr)


    clipboard.copy(insertstring)
    time.sleep(.5)
    tspsendwindowkey(csdn_window, 'v', control=1)

    time.sleep(.2)
    clipboard.copy('')

    tspfocuswindow(csdn_window)


#------------------------------------------------------------
def imagedir2csdn(imgdir, width, sideflag):
    global num0len

    pptimages = os.listdir(imgdir)

    #--------------------------------------------------------
    printf("Image Directory:%s"%imgdir)

    if len(pptimages) == 0:
        printf("No Image in %s!"%imgdir)
        printf("\a")
        return

    pptnames = pptimages[0].split('.')

    if len(pptnames) < 2:
        printf("Images have no extension !\a")
        return

    #--------------------------------------------------------
    pptname = []
    pptname.append('.'.join(pptnames[:-1]))
    pptname.append(pptnames[-1])

    extstr = pptname[1]

    #--------------------------------------------------------
    prefix = pptname[0][:-1]

    if len(pptname[0]) > 1:
        if pptname[0][-2:].isdigit():
            prefix = pptname[0][:-2]

    if len(pptname[0]) > 2:
        if pptname[0][-3:].isdigit():
            prefix = pptname[0][:-3]

    if len(pptname[0]) > 3:
        if pptname[0][-4:].isdigit():
            prefix = pptname[0][:-4]

    #--------------------------------------------------------
    fname = "%s%d.%s"%(prefix, 1, extstr)

    if num0len == 2:
        fname = "%s%02d.%s"%(prefix, 1, extstr)
    elif num0len == 3:
        fname = "%s%03d.%s"%(prefix, 1, extstr)
    elif num0len == 4:
        fname = "%s%04d.%s"%(prefix, 1, extstr)
    elif num0len == 5:
        fname = "%s%05d.%s"%(prefix, 1, extstr)
    elif num0len == 6:
        fname = "%s%06d.%s"%(prefix, 1, extstr)
    elif num0len == 7:
        fname = "%s%07d.%s"%(prefix, 1, extstr)
    elif num0len == 8:
        fname = "%s%08d.%s"%(prefix, 1, extstr)
    elif num0len == 9:
        fname = "%s%09d.%s"%(prefix, 1, extstr)
    elif num0len == 10:
        fname = "%s%010d.%s"%(prefix, 1, extstr)

    fname = os.path.join(imgdir, fname)

    if num0len == 1:
        if not os.path.isfile(fname):
            fname = "%s%02d.%s"%(prefix, 1, extstr)
            fname = os.path.join(imgdir, fname)
            num0len = 2

        if not os.path.isfile(fname):
            fname = "%s%03d.%s"%(prefix, 1, extstr)
            fname = os.path.join(imgdir, fname)
            num0len = 3

        if not os.path.isfile(fname):
            fname = "%s%04d.%s"%(prefix, 1, extstr)
            fname = os.path.join(imgdir, fname)
            num0len = 4


    if not os.path.isfile(fname):
        for f in pptimages:
            fname = os.path.join(imgdir, f)
            printf(fname)
            pasteimg2csdn(fname, width, sideflag)
            time.sleep(.5)

        return


    #--------------------------------------------------------
    for i in range(len(pptimages)):
        fname = "%s%d.%s"%(prefix, i+1, extstr)

        if num0len == 2:
            fname = "%s%02d.%s"%(prefix, i+1, extstr)
        elif num0len == 3:
            fname = "%s%03d.%s"%(prefix, i+1, extstr)
        elif num0len == 4:
            fname = "%s%04d.%s"%(prefix, i+1, extstr)
        elif num0len == 5:
            fname = "%s%05d.%s"%(prefix, i+1, extstr)
        elif num0len == 6:
            fname = "%s%06d.%s"%(prefix, i+1, extstr)
        elif num0len == 7:
            fname = "%s%07d.%s"%(prefix, i+1, extstr)
        elif num0len == 8:
            fname = "%s%08d.%s"%(prefix, i+1, extstr)
        elif num0len == 9:
            fname = "%s%09d.%s"%(prefix, i+1, extstr)
        elif num0len == 10:
            fname = "%s%010d.%s"%(prefix, i+1, extstr)

        fname = os.path.join(imgdir, fname)
        printf(fname)

        if not os.path.isfile(fname):
            printf('Can not file %s!'%fname)
            break

        pasteimg2csdn(fname, width, sideflag)
        time.sleep(.5)

    #--------------------------------------------------------

#------------------------------------------------------------
def filename2num(fs):
    for i in range(len(fs)):
        if not fs[-(i+1):].isdigit():
            return int(fs[-i:])

    return int(fs)

#------------------------------------------------------------
def picdir2csdn(dirstr, width, sideflag):
    ispicfile = lambda s : 1 if s.split('.')[-1].upper() == 'JPG' or \
                              s.split('.')[-1].upper() == 'BMP' or \
                              s.split('.')[-1].upper() == 'PNG' else 0


    pptimages = [s for s in os.listdir(dirstr) if ispicfile(s) == 1]
#    s = sorted(pptimages, reverse=False)

    pagenum = [filename2num(ss.split('.')[0]) for ss in pptimages]
    pagesort = sorted(zip(pptimages, pagenum), reverse=False, key=lambda x:x[1])

    s = [p[0] for p in pagesort]

    printf('Total Page Number : %d'%len(s))

    for f in s:
        fname = os.path.join(dirstr, f)
        printf(fname)
        pasteimg2csdn(fname, width, sideflag)
        time.sleep(.5)

#------------------------------------------------------------
filedir = ''
tspdropfile2pastetext()
filedirsect = clipboard.paste().split()

if len(filedirsect) > 0:
    filedir = filedirsect[0]
else:
    printf("Usage: csdnppt filename[filedir]\a")
    exit()


#------------------------------------------------------------
width=800
sideflag = 1

for s in sys.argv[1:]:
    if s[0] == '#':
        num0len = int(s[1:])
    elif s[0] == 'w' or s[0] == 'W':
        width = int(s[1:])
    elif s[0] == 's' or s[0] == 'S':
        sideflag = int(s[1:])


#------------------------------------------------------------
if os.path.isfile(filedir):
    extractfile(filedir)
    filedir = r'd:\temp\pptpng'

if not os.path.isdir(filedir):
    printf("Can not find directory : %s"%filedir)

#imagedir2csdn(filedir, width, sideflag)
picdir2csdn(filedir, width, sideflag)

#------------------------------------------------------------
#        END OF FILE : PPT2CSDN.PY
#============================================================