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

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按照文件名最后数字进行排序相关的知识,希望对你有一定的参考价值。

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

关键词 PPTJPEGPython排序

文件排序
文章目录
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时文件名称

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

▲ 图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().fin

以上是关于按照文件名最后数字进行排序的主要内容,如果未能解决你的问题,请参考以下文章

经典排序算法——冒泡排序

JAVA读取文件 排序 写出文件

linux命令之排序命令sort命令

按照字符串中的数组进行排序的方法(python)

排序方法的分类和实现

冒泡排序